浅拷贝:只拷贝第一层内容. 不管第一层内容为不可变还是可变数据类型,则第一层内容的内存地址都一样,内容也就一样。 深拷贝:把这个对象内容的内容全部拷贝一遍,引入copy模块 若第一层内容为不可变数据类型,则第一层内容的内存地址都一样,内容也就一样; 若第一层内容为可变数据类型, 则第一层内容的内存地址不一样,内容也就不一样。
# 深浅拷贝,赋值操作
lst1 = ["金","木","水",["土龙"]]
lst2 = lst1 # 赋值操作
lst3 = lst1[:] # 浅拷贝
lst4 = lst1.copy() # 浅拷贝
lst5 = copy.deepcopy(lst1) # 深拷贝
lst1[3].append("土")
lst1.append("火")
print("原始数据:", id(lst1[1]), lst1)
print("赋值操作:", id(lst2[1]), lst2)
print("浅拷贝: ", id(lst3[1]), lst3)
print("浅拷贝: ", id(lst4[1]), lst4)
print("深拷贝: ", id(lst5[1]), lst5)
# 运行结果
# 原始数据: 2232362115600 ['金', '木', '水', ['土龙', '土'], '火']
# 赋值操作: 2232362115600 ['金', '木', '水', ['土龙', '土'], '火']
# 浅拷贝: 2232362115600 ['金', '木', '水', ['土龙', '土']]
# 浅拷贝: 2232362115600 ['金', '木', '水', ['土龙', '土']]
# 深拷贝: 2232362115600 ['金', '木', '水', ['土龙']]