1

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

 

posted @ 2018-01-29 19:20  萌哥-爱学习  阅读(231)  评论(0编辑  收藏  举报