深浅copy及赋值运算
1.赋值
对于赋值运算来说,内存指向同一个地址。字典,列表,集合都一样
l1=[1,2,3]
l2=l1
l2.append(111)
print(l1,l2)
打印出来的结果是:[1,2,3,111],[1,2,3,111]
2.浅copy
l1=[1,2,3]
l2=l1.copy
l2.append(111)
print(l1,l2)
打印出来的结果是:[1,2,3],[1,2,3,111]
copy不是指向一个空间,而是在内存中开辟了一个新的空间。
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址。所以对于对于第二层以及更深的层数来说,都指向的是同一个内存地址
3.深copy
import copy
l1=[1,2,[1,2,3],4]
l2=copy.deepcopy(l1)
l1[2].append(666)
print(l1,l2)
打印出来的结果是:[1,2,[1,2,3,666],4],[1,2,[1,2,3],4]
因此,对于深copy来说,两个是完全独立的,改变任意一个的任一元素(不管多少层),另一个绝对不会改变
4.切片
对于切片来说,相当进行了浅copy
l1=[1,2,[1,2,3],4]
l2=l1[:]
l1[2].append(666)
print(l2)
#结果为1,2,[1,2,3,666],4]
posted on 2019-01-25 15:06 qingqing0803 阅读(106) 评论(0) 收藏 举报
浙公网安备 33010602011771号