Day 7 深copy和浅Copy
dict.fromkeys的用法
1
2
3
4
5
6
7
8
9
10
11
|
#dict.fromkeys的用法 #例子1 dic = dict .fromkeys([ 1 , 2 , 3 ],[]) print (dic) #{1: [], 2: [], 3: []} dic[ 2 ].append( 'alex' ) #{1: ['alex'], 2: ['alex'], 3: ['alex']} print (dic) #例子二 dic1 = dict .fromkeys([ 'Q' , 'w' ],[ 'a' , 'b' ]) print (dic1) #{'Q': ['a', 'b'], 'w': ['a', 'b']} dic1[ 'w' ].append( 'd' ) print (dic1) #{'Q': ['a', 'b', 'd'], 'w': ['a', 'b', 'd']} |
浅copy和深copy
浅copy的引入:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
引入浅copy #只是第一层的列表变化 l1 = [ 1 , 2 , 3 ] l2 = l1[:] l1.append( 123 ) print (l1) #[1, 2, 3, 123] print (l2) #[1, 2, 3] #第二层列表改变 l3 = [ 1 ,[ 2 , 3 ], 4 ] l4 = l3[:] #实质上是浅copy l3[ 1 ].append( 666 ) print (l3) #[1, [2, 3, 666], 4] print (l4) #[1, [2, 3, 666], 4] |
浅copy:
1
2
3
4
5
6
7
|
#浅copy #对于浅copy来说,第一层都是独立的内存地址,从第二层开始都是指向同一个内存地址,一变全都变。 l5 = [ 9 , 8 ,[ 7 , 6 ], 5 ] l6 = l5.copy() l5[ 2 ].append( 888 ) print (l5, id (l5), id (l5[ 2 ])) #[9, 8, [7, 6, 888], 5] 31820816 31820856 print (l6, id (l6), id (l6[ 2 ])) #[9, 8, [7, 6, 888], 5] 31819336 31820856 |
深copy:
1
2
3
4
5
6
7
8
|
#深copy #对于深copy来说,无论多少层,在内存中,都是两个独立的内存地址。 import copy l7 = [ 9 , 8 ,[ 7 , 6 ], 5 ] l8 = copy.deepcopy(l7) l7[ 2 ].append( 888 ) print (l7, id (l7), id (l7[ 2 ])) #[9, 8, [7, 6, 888], 5] 41955896 41955816 print (l8, id (l8), id (l8[ 2 ])) #[9, 8, [7, 6 ], 5] 41957976 41957936
|