import copy
"""
深拷贝 和 浅拷贝
相同点:.
1、如果是不可变对象,如:字符串、元组。深拷贝 和 浅拷贝 都不会对原拷贝对象有影响
2、如果是可变对象,且不带子对象,如:列表、字典。深拷贝 和 浅拷贝 都不会对原拷贝对象有影响
3、如果是可变对象,且带子对象,修改不是子对象的内容。深拷贝 和 浅拷贝 都不会对原拷贝对象有影响
不同点:
如果是可变对象,且带子对象,修改子对象的内容。深拷贝不会对原拷贝对象有影响,浅拷贝会修改原拷贝对象内容
"""
print("========================================浅拷贝copy.copy()===============================================")
"""
浅拷贝:
只拷贝容器本身,容器中的元素并未拷贝
第一种:
拷贝对象是可变对象,但是没有复杂子对象
结论:
原来的值改变,不会影响浅复制后的值
"""
a = [1, 2, 3, 4, 5]
b = copy.copy(a)
b.append(6)
print("【浅拷贝】===可变对象,且不带子对象===改变拷贝后的对象", b) # [1, 2, 3, 4, 5, 6]
print("【浅拷贝】===可变对象,且不带子对象===原对象", a) # [1, 2, 3, 4, 5]
print("【结论】: 不带复杂子对象的可变对象【浅拷贝】后的对象修改和原对象没有关系\n")
"""
第二种:
拷贝对象中含有复杂子对象
① 修改拷贝对象中不是复杂子对象的内容
② 修改拷贝对象中复杂子对象的内容
结论:
① 修改拷贝对象中不是复杂子对象的内容,不管修改拷贝前还是拷贝后的对象,都不会影响互相影响
② 修改拷贝对象中复杂子对象的内容,同时会修改原来拷贝对象中复杂子对象的值
"""
c = [1, 2, [3, 4, 5]]
d = copy.copy(c)
# 1.修改拷贝对象中不是复杂子对象的内容
d[0] = 2
print("【浅拷贝】===》可变对象===》且带复杂子对象===》修改不是子对象的内容", d) # [2, 2, [3, 4, 5]]
print("【浅拷贝】===》可变对象===》且带复杂子对象===》原对象", c) # [1, 2, [3, 4, 5]]
print("【结论】: 带复杂子对象的可变对象【浅拷贝】后【修改非子对象】的内容和原对象没有关系\n")
# 2.修改拷贝对象中复杂子对象的内容
k = copy.copy(c)
k[2][0] = 5
print("【浅拷贝】===》可变对象===》且带复杂子对象===》修改子对象的内容", k) # [1, 2, [5, 4, 5]]
print("【浅拷贝】===》可变对象===》且带复杂子对象===》原对象", c) # [1, 2, [5, 4, 5]]
print("【结论】: 带复杂子对象的可变对象【浅拷贝】后【修改子对象】的内容和原对象有关系=====》浅拷贝修改复杂子对象内容,会影响原对象\n")
print("======================================深拷贝copy.deepcopy()============================================")
"""
第一种:拷贝对象是可变对象
"""
# 1.拷贝对象是可变对象
info = [1, 2, 3, 4, 5]
info_copy = copy.deepcopy(info)
info_copy[4] = 88
print("【深拷贝】===》可变对象===》且不带子对象===》改变拷贝后的对象", info_copy) # [1, 2, 3, 4, 88]
print("【深拷贝】===》可变对象===》且不带子对象===》原对象", info) # [1, 2, 3, 4, 5]
print("【结论】: 不带复杂子对象的可变对象【深拷贝】后的对象修改和原对象没有关系\n")
"""
第二种:拷贝对象中有复杂子对象
① 修改不是复杂子对象的内容
② 修改复杂子对象的内容
结论:
是否有复杂子对象,深拷贝都无影响
"""
# 1.拷贝对象中含有复杂子对象。修改不是子对象的部分
e = {"name": "zkc", "age": 18, "info": [1, 2, 3, 4, 5]}
f = copy.deepcopy(e)
param = {"age": 20}
f.update(param)
print("【深拷贝】===》可变对象===》且不带子对象===》改变拷贝后的对象", f) # {'name': 'zkc', 'age': 20, 'info': [1, 2, 3, 4, 5]}
print("【深拷贝】===》可变对象===》且不带子对象===》原对象", e) # {'name': 'zkc', 'age': 18, 'info': [1, 2, 3, 4, 5]}
print("【结论】: 带复杂子对象的可变对象【深拷贝】后【修改非子对象】的内容和原对象没有关系\n")
# 2.拷贝对象中含有复杂子对象。修改子对象的部分
h = copy.deepcopy(e)
h["info"][0] = 77
print("【深拷贝】===》可变对象===》且带子对象===》改变拷贝后的对象", h) # {'name': 'zkc', 'age': 18, 'info': [77, 2, 3, 4, 5]}
print("【深拷贝】===》可变对象===》且带子对象===》原对象", e) # {'name': 'zkc', 'age': 18, 'info': [1, 2, 3, 4, 5]}
print("【结论】: 带复杂子对象的可变对象【深拷贝】后【修改子对象】的内容和原对象没有关系\n")
python的深拷贝和浅拷贝
于 2025-09-04 11:37:55 首次发布
689

被折叠的 条评论
为什么被折叠?



