Python copy模块
Posted chaimy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python copy模块相关的知识,希望对你有一定的参考价值。
参考:https://docs.python.org/zh-cn/3/library/copy.html
介绍
Python copy模块包括copy()和deepcopy()两函数。
copy.copy(x): 返回 x 的浅层(shallow)复制。
copy.deepcopy(x[, memo]): 返回 x 的深层复制。
代码示例
import copy
#列表
a = [1,2,[5,4]]
a1 = copy.copy(a)
a2 = copy.deepcopy(a)
print(a1) #[1, 2, [5, 4]]
print(a2) #[1, 2, [5, 4]]
#改变列表最外层的元素不会影响shallow copy和deep copy的结果
a[0] = "YY"
print(a) #[\'YY\', 2, [5, 4]]
print(a1) #[1, 2, [5, 4]]
print(a2) #[1, 2, [5, 4]]
#改变第二层列表的元素不会影响deep copy的结果,shallow copy的结果会受到影响
a[2][0] = "XX"
print(a) #[\'YY\', 2, [\'XX\', 4]]
print(a1) #[1, 2, [\'XX\', 4]]
print(a2) #[1, 2, [5, 4]]
#字典
b = "name":"ZZ", "pets": ["tantan","lele"]
b1 = copy.copy(b)
b2 = copy.deepcopy(b)
print(b1) #\'name\': \'ZZ\', \'pets\': [\'tantan\', \'lele\']
print(b2) #\'name\': \'ZZ\', \'pets\': [\'tantan\', \'lele\']
#改变字典最外层的键值对不会影响shallow copy和deep copy的结果
b["age"] = 10 #在字典最外层增加键值对
print(b) #\'name\': \'ZZ\', \'pets\': [\'tantan\', \'lele\'], \'age\': 10
print(b1) #\'name\': \'ZZ\', \'pets\': [\'tantan\', \'lele\']
print(b2) #\'name\': \'ZZ\', \'pets\': [\'tantan\', \'lele\']
del b["name"] #删除字典最外层删除键值对,del b["pets"]
print(b) #\'pets\': [\'tantan\', \'lele\'], \'age\': 10
print(b1) #\'name\': \'ZZ\', \'pets\': [\'tantan\', \'lele\']
print(b2) #\'name\': \'ZZ\', \'pets\': [\'tantan\', \'lele\']
#改变字典中列表的元素不会影响deep copy的结果,shallow copy的结果会受到影响
b["pets"].append("huahua")
print(b) #\'pets\': [\'tantan\', \'lele\', \'huahua\'], \'age\': 10
print(b1) #\'name\': \'ZZ\', \'pets\': [\'tantan\', \'lele\', \'huahua\']
print(b2) #\'name\': \'ZZ\', \'pets\': [\'tantan\', \'lele\']
总结
deep copy对象是独立于原object存在的,也就是说原object的任何改变都不会引起deepcopy()对象的改变;
shallow copy对象不是完全独立于原object,原object内二级对象(比如字典或列表内的字典或列表)的改变会引起shallow copy对象改变。
以上是关于Python copy模块的主要内容,如果未能解决你的问题,请参考以下文章