Python:深浅copy

Python:深浅copy

浅copy 

浅拷贝就是对引用的拷贝,执拷贝父对象,里面的数据不拷贝出来,其中的数据与原对象里面数据用的是相同的地址空间

#浅copy 第一层各自独立,从第二层开始,共用一个内存地址
s1 = [1, 2, 3,[11,22]]         
s2 = s1.copy()
s1[-1].append(666)                  #在s1最后增加元素‘666’,s2也会增加
print(s1, s2)                        
print(id(s1), id(s2))               #打印s1与s2的id号,是不同的
print(id(s1[-1]), id(s2[-1]))       #打印s1与s2中子列表的id号,是相同的

[1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]]
52642760 53470992
53471152 53471152

切片 浅copy

s1 = [1, 2, 3, [11, 22]]
s2 = s1[:]
s1.insert(1,66)
print(s1, s2)
s1[-1].append(666)
print(s1, s2)

[1, 66, 2, 3, [11, 22]] [1, 2, 3, [11, 22]]
[1, 66, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]]

深copy

深copy 无论多少层,都是互相独立的。

import copy               #深copy 需要使用copy模块
s1 = [1, 2, 3,[11,22]]
s2 = copy.deepcopy(s1)
s1.append(666)
print(s1, s2)

s1 = [1, 2, 3,[11,22]]
s2 = copy.deepcopy(s1)
s1[-1].append(666)
print(s1, s2)

[1, 2, 3, [11, 22], 666] [1, 2, 3, [11, 22]]
[1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22]]

猜你喜欢

转载自www.cnblogs.com/bailo/p/9085255.html