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