Python 中的赋值与深浅拷贝¶
Python 中的赋值只是引用了对象,当原变量发生改变时,新变量也会随之发生改变。
.copy()
方法可以进行浅拷贝,它可以深拷贝父对象(一级目录),但子对象(二级目录)仍然只是引用。
.deepcopy()
方法可以进行深拷贝,它可以深拷贝父对象(一级目录)和子对象(二级目录),当原变量改变时,深拷贝得到的变量不会发生任何改变。
代码示例¶
导入copy
包(仅在深拷贝时需要用到)¶
创建带有二级目录的字典¶
这里的数组[1,2,3]
就是子对象(二级目录)。
赋值与深浅拷贝¶
Python
dict2 = dict1 # 浅拷贝:引用对象
dict3 = dict1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,子对象是引用
dict4 = copy.deepcopy(dict1) # 深拷贝:深拷贝父对象(一级目录)核子对象(二级目录)
修改原变量¶
查看赋值与深浅拷贝的结果是否改变¶
Python
# 输出结果
print("dict1", dict1)
print("dict2", dict2)
print("dict3", dict3)
print("dict4", dict4)
Python
dict1 = {"user": "root", "num": [2, 3]}
dict2 = {"user": "root", "num": [2, 3]} # (1)!
dict3 = {"user": "runoob", "num": [2, 3]} # (2)!
dict4 = {"user": "runoob", "num": [1, 2, 3]} # (3)!
- 赋值只是引用了对象,当原变量发生改变时,新变量也会随之发生改变。
- 浅拷贝中的父对象
'user': 'runoob'
没有发生改变,但'num': [1, 2, 3]
也变成了'num': [2, 3]
。 - 深拷贝中的父对象
'user': 'runoob'
和'num': [1, 2, 3]
都没有改变。