关于深浅拷贝的问题
# coding: utf-8old_list = ]
new_list = old_list.copy()
new_list.append('666')
print(old_list, id(old_list))
print(new_list, id(new_list))
运行结果:
] 442108923712
, '666'] 442110592448
# coding: utf-8
old_list = ]
new_list = old_list.copy()
new_list.append('666')
print(old_list, id(old_list))
print(new_list, id(new_list))
运行结果:
] 814921142080
] 814922811776
请依次从地址的角度详细解释一下
直接举些例子,先看看这两拷贝的区别:
这里我们用Python内置函数 id() 来查看他们的内存地址是否相同,相同说明是同一个数据
import copy
l = [,1,2,3]
x = copy.copy(l) # 浅拷贝:这里相当于列表切片[:]
z = copy.deepcopy(l)# 深拷贝
print(' 原列表id地址:',id(l),'\n浅拷贝列表id地址:',id(x),'\n深拷贝列表id地址:',id(z))
运行结果:
原列表内元素id地址: 1708146868416
浅拷贝列表内元素id地址: 1708149001152
深拷贝列表内元素id地址: 1708149000448
三个列表的 id 全部不相同,说明浅拷贝是直接创建了新的列表,那列表内的元素呢?我们接下来看看下面的运行情况:
import copy
l = [,1,2,3]
x = copy.copy(l) # 浅拷贝:这里相当于列表切片[:]
z = copy.deepcopy(l)# 深拷贝
print(' 原列表内元素id地址:',id(l),'\n浅拷贝列表内元素id地址:',id(x),'\n深拷贝列表内元素id地址:',id(z))
运行结果:
原列表内元素id地址: 2351807077120
浅拷贝列表内元素id地址: 2351807077120
深拷贝列表内元素id地址: 2351808203584
会发现浅拷贝的元素id和原来列表id相同,所以浅拷贝没有列表内的元素进行拷贝
而深拷贝的元素id与原先列表不同,所以深拷将列表内的元素彻彻底底的进行拷贝了
简单的说,就是深拷贝是完完全全的复制一遍,然后创建了新的列表,而浅拷贝只复制了列表的外壳,而内部元素还是没有拷贝成新的~
要注意的是:这些拷贝对所有可变类容器的来说都有这种性质,比如:列表、元组、字典、集合
Twilight6 发表于 2021-6-13 15:57
直接举些例子,先看看这两拷贝的区别:
这里我们用Python内置函数 id() 来查看他们的内存地址是否相 ...
佩服
页:
[1]