发现深拷贝和浅拷贝效果一致:
list1 = [{'a': 1}, {'b': 2}, {'c': 3}]
list2 = copy.copy(list1) # 浅拷贝
list2 = copy.deepcopy(list1) # 深拷贝
list1.remove({'b': 2})
print(list1, list2) # [{'a': 1}, {'c': 3}] [{'a': 1}, {'b': 2}, {'c': 3}]
请问一下有什么区别呢?
发现深拷贝和浅拷贝效果一致:
list1 = [{'a': 1}, {'b': 2}, {'c': 3}]
list2 = copy.copy(list1) # 浅拷贝
list2 = copy.deepcopy(list1) # 深拷贝
list1.remove({'b': 2})
print(list1, list2) # [{'a': 1}, {'c': 3}] [{'a': 1}, {'b': 2}, {'c': 3}]
请问一下有什么区别呢?
比较初级的面试题里面会出现的内容。
深拷贝就完整复制数据的值(而非引用),目的在于避免拷贝后数据对原数据产生影响。
他们都是拷贝,得到的对象都不是原来的对象。所以只有修改足够“深”的时候,才能看到区别,比如你把 list1.remove({'b':2})
换成 list1[1]['b'] = 5
。
浅拷贝只是列表是新的列表,它的元素还是原来的元素。但是深拷贝,元素也不是原来元素了。
2 回答5k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
你仔细看看你的结果,二者是不一样的。给你提供一个非常好用的代码执行visualize网站,帮助你理解代码执行过程: pythontutor,以下是两张截图:
深拷贝:
copy.deepcopy()
嵌套元素
。对 deep_copied 所做的更改不会影响原始列表 a。 原始列表 a 的嵌套元素会递归地复制,以确保即使在复制列表中,深层嵌套的对象也是完全独立的。deepcopy
拷贝嵌套列表,修改拷贝中的元素不会影响原始列表。浅拷贝:
copy.copy()
copy
拷贝嵌套列表,修改拷贝中的元素会影响原始列表。