标签:总结 拷贝 直接 切片 列表 日常 port 深拷贝 空间
a = [1,2,3,4,5,6,[7,8]]
浅拷贝(四种方法)
b = a # 直接赋值
c = a[:] # 整体切片
d = list(a) # 工厂函数
import copy # copy库的浅拷贝函数
e = copy.copy(a)
深拷贝(一种方法)
import copy #copy库的深拷贝函数 d = copy.deepcopy(a)
总结:
# 深拷贝非常好理解,就是拷贝过来后,两者互不相干,互不影响;
# 浅拷贝的理解就复杂一些了
1.首先对于直接赋值,其实就相当于给原来存数据的内存地址多加了一个名字,a跟b的内存地址是一样的,两者共用一个数据,所以无论对哪一个进行改动,所有都会改变
2.再是对于整体切片,工厂函数和浅拷贝函数来说,这些都是开辟了新的内存空间,然后各自都是相互独立的,无论怎么改变都是互不影响的(前提:只改变拷贝的第一层)
3.【补充】什么叫:只改变拷贝的第一层呢,就是a中的1,2,3,4,5,6改了就改了,而如果你要动7和8,那么c,d,e也会跟着改,即a[x]互不影响,a[x][y]互相影响
也就是说,对于只有一层的列表,那么,b,d,e就是‘深拷贝’,但是由于列表不是固定的,所以当你真的需要copy时,还是老老实实用deepcopy,因为这个拷贝才符合我们对于【复制】的日常理解
标签:总结 拷贝 直接 切片 列表 日常 port 深拷贝 空间
原文地址:https://www.cnblogs.com/python-only/p/9657117.html