Python 列表深浅拷贝的用法

列表是一个有序的,可修改的,元素以逗号分割,以中括号包围的序列。
1.对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以对于第二层以及更深的层数来说,保持一致性。

lst1=['悟空','八戒',['西施','貂蝉']]
lst2=lst1.copy()
print(lst1)
print(lst2)
lst2[0]='猴哥'
print(lst2)
lst2[2][0]='杨贵妃'
print(lst2)
print(lst1)

输出结果:

['悟空', '八戒', ['西施', '貂蝉']]
['悟空', '八戒', ['西施', '貂蝉']]
['猴哥', '八戒', ['西施', '貂蝉']]
['猴哥', '八戒', ['杨贵妃', '貂蝉']]
['悟空', '八戒', ['杨贵妃', '貂蝉']]

大家可以看到copy的变量中的第一层的是改变是不影响原变量的,但是第二层的改变是会影响到原变量的,所以浅copy的变量中的第二层以及更深层次的元素与原变量中的第二层以及更深层次的元素是公用的。

2.深拷贝需要导入 copy 模块

import copy
lst1=['悟空','八戒',['西施','貂蝉']]
lst2=copy.deepcopy(lst1)
print(lst2)
lst2[0]='猴哥'
print(lst2)
lst2[2][0]='杨玉环'
print(lst2)
print(lst1)

输出结果:

['悟空', '八戒', ['西施', '貂蝉']]
['猴哥', '八戒', ['西施', '貂蝉']]
['猴哥', '八戒', ['杨玉环', '貂蝉']]
['悟空', '八戒', ['西施', '貂蝉']]

对于深拷贝而言,复制的是原变量的所有元素(不管第一层还是更深层),不管这个怎样被增改都不会对另一个产生影响,所以这就是深拷贝与浅拷贝最大的区别。

猜你喜欢

转载自blog.csdn.net/weixin_44239379/article/details/85331094