复制的‘深浅’‘真假’

# 真假 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中的值并没有改变。  此方法慎用,当数据过多时,会占据额外的内存。

 

posted @ 2018-12-14 12:31  要想希希啊  阅读(114)  评论(0编辑  收藏  举报