# 真假 copy
# 假copy
names = ['Tudou', 'Qiezi',['Xiaocong', 'Lajiao'], 'Xihongshi', 'Baicai', 'Qingcai']
name1 = names.copy() # 将names 复制到name1
names[0] = 'Fanqie' # 更改names中的值
print(names)
print(name1)
# 输出结果:
# >> ['Fanqie', 'Qiezi', ['Xiaocong', 'Lajiao'], 'Xihongshi', 'Baicai', 'Qingcai']
# >>['Tudou', 'Qiezi', ['Xiaocong', 'Lajiao'], 'Xihongshi', 'Baicai', 'Qingcai']
names[2][0] = 'Caihua' # 将names中子元素列表的的值改变
print(names)
print(name1)
# >>> ['Fanqie', 'Qiezi', ['Caihua', 'Lajiao'], 'Xihongshi', 'Baicai', 'Qingcai']
# >>> ['Tudou', 'Qiezi', ['Caihua', 'Lajiao'], 'Xihongshi', 'Baicai', 'Qingcai']
# 更改第一层数据后,复制而来的name1中的数据没有更改。
# 而更改names中的子元素'['Caihua', 'Lajiao']'的数据后,发现name1中的数据也更改了。
# copy()方法只是简单的复制了names中的第一层数据,而对于列表中的列表子元素,只是复制了其引用地址。
# 所以在更改子元素列表时,复制得到的列表也被改变了.
# name1 = names # 将name1指向变量names指向的内存地址
# 真复制,调用copy模块
import copy
names = ['Tudou', 'Qiezi',['Xiaocong', 'Lajiao'], 'Xihongshi', 'Baicai', 'Qingcai']
name1 = copy.copy(names) # 该方法为假(浅)复制
name1 = copy.deepcopy(names) # 深复制
names[0] = 'Fanqie'
names[2][0] = 'Caihua'
print(names)
print(name1)
# ['Fanqie', 'Qiezi', ['Caihua', 'Lajiao'], 'Xihongshi', 'Baicai', 'Qingcai']
# ['Tudou', 'Qiezi', ['Xiaocong', 'Lajiao'], 'Xihongshi', 'Baicai', 'Qingcai']
# 可见复制得到的name1中的值并没有改变。 此方法慎用,当数据过多时,会占据额外的内存。