|
发表于 2020-6-21 16:43:34
|
显示全部楼层
本帖最后由 Twilight6 于 2020-6-21 18:17 编辑
举些例子吧,先看看这两拷贝的区别:
这里我们用Python内置函数 id() 来查看他们的内存地址是否相同,相同说明是同一个数据
- import copy
- l = [[1,2,3],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],1,2,3]
- x = copy.copy(l) # 浅拷贝:这里相当于列表切片[:]
- z = copy.deepcopy(l) # 深拷贝
- print(' 原列表内元素id地址:',id(l[0]),'\n浅拷贝列表内元素id地址:',id(x[0]),'\n深拷贝列表内元素id地址:',id(z[0]))
复制代码
运行结果:
- 原列表内元素id地址: 2351807077120
- 浅拷贝列表内元素id地址: 2351807077120
- 深拷贝列表内元素id地址: 2351808203584
复制代码
会发现浅拷贝的元素id和原来列表id相同,所以浅拷贝没有列表内的元素进行拷贝
而深拷贝的元素id与原先列表不同,所以深拷将列表内的元素彻彻底底的进行拷贝了
简单的说,就是深拷贝是完完全全的复制一遍,然后创建了新的列表,而浅拷贝只复制了列表的外壳,而内部元素还是没有拷贝成新的~
要注意的是:这些拷贝对所有可变类容器的来说都有这种性质,比如:列表、元组、字典、集合
|
|