qingqing0803

深浅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)    收藏  举报

导航