<返回更多

python的浅copy和深copy

2021-08-18    python自羞
加入收藏

浅copy:

list1=['zhangsan','lisi','wangwu','zhaoliu']
list2=list1.copy()  # copy之后给list2一个新的地址
print('list1pop前',id(list1))#list1pop前 1442331619456
print('list2pop前',id(list2))#list2pop前 1442331620416
print(list1,list2)
list2.pop()  #  上一节说过,列表是可变类型,从list2删除一个元素,list2的地址不会改变
print('list1pop后',id(list1))#list1pop后 1442331619456
print('list2pop后',id(list2))#list2pop后 1442331620416
print(list1,list2)

对于list2的修改操作,更不会影响list1

这个类似你从D盘copy一个文件到E盘,不论你在E盘如何修改copy过去的文件,对于源文件没有任何影响。

python的浅copy和深copy

 

浅copy:

可变类型:公用一个地址,修改里面的内容,但是地址不会改变

不可变类型:开始内容一样,地址一样;内容如果发生变化,地址跟着变化

 

如下所示:

我们修改列表里面index 3指向列表里面的一个列表

list3[2].Append(100)

list2[2].append(100)

list1[2].append(100)

列表里面的列表是可变类型,修改里面的内容,但是内存地址没有变,

因此打印出来的三个list指向的内容都存在修改后的100.

 

 

python的浅copy和深copy

 

 

python的浅copy和深copy

 

 

python的浅copy和深copy

 

下面的例子,修改的是list列表里面的index0 ,str字符串是不可变类型,

只要修改了里面的内容,地址随着改变。

修改list3[0],那么list3[0]的地址发生了改变,list3[0]的内容跟随一起改变。

但是list1[0]和list2[0]指向 的地址并没有发生改变,因此他的内容还是张三。

这个如果还不是特别明白,可以翻看上一篇,可变和不可变

python的浅copy和深copy

 

 

python的浅copy和深copy

 

 

python的浅copy和深copy

 

深度copy和浅copy,仔细对比修改之后的地址

import copy

list1=['张三','李四',[1,2,3,4]]
list2=copy.deepcopy(list1)
list2[2].append(100)
print('list1'+'*'*10)
for i in list1:       # 采用for循环看清楚一点各个地址
    print(i,id(i))
print('list2'+'-'*10)
for i in list2:
    print(i,id(i))
python的浅copy和深copy

深度copy

 

python的浅copy和深copy

浅copy

深度copy的时候,list 里面的可变list地址 是不一样的;

浅copy的时候,list 里面的可变list地址 是一样的;

这样的话,深度copy的地址不一样,那么再次修改list里面的可变list,修改list2不会影响list1

同理修改list1 不会影响list2

 

python的浅copy和深copy

 

这个一定一定要亲自去敲一下代码,打开文章,你看懂了,关闭文章你就不知道咋回事!

切勿眼高手低!敲一下去,理会一下!

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>