1.浅拷贝copy.copy
浅拷贝只是拷贝了引用,并没有拷贝内存中的数据。即内存数据并没有被复制一份,而是对它的引用多了一份。(对于不可变类型)
故
1)分片表达式可以赋值一个序列,等价于浅拷贝
c = [1, 5, 3]
a = c[:]
字典的copy方法可以拷贝一个字典,等价于浅拷贝
d = {'name':'fzk'}
c = d.copy()
注意点:
浅拷贝对不可变类型和可变类型的copy不同
copy.copy对于可变类型,会进行数据拷贝,会复制一份数据
copy.copy对于不可变类型,不会拷贝数据,仅仅是复制一份引用
In [88]: a = [11,22,33]
In [89]: b = copy.copy(a)
In [90]: id(a)
Out[90]: 59275144
In [91]: id(b)
Out[91]: 59525600
In [92]: a.append(44)
In [93]: a
Out[93]: [11, 22, 33, 44]
In [94]: b
Out[94]: [11, 22, 33]
In [95]: a = (11,22,33)
In [96]: b = copy.copy(a)
In [97]: id(a)
Out[97]: 58890680
In [98]: id(b)
Out[98]: 58890680
只有可变类型,可以通过方法修改数据,而不是修改引用
2.深拷贝copy.deepcopy
深拷贝直接拷贝了内存中的数据。即内存数据被复制一份。得到的变量指向的是复制得到的数据
引用自:
【python提高高级day02】深拷贝、浅拷贝+进一步理解深拷贝+拷贝的其他方式+浅拷贝对不可变类型和可变类型的copy不同+copy.copy和copy.deepcopy的区别
https://blog.nowcoder.net/n/1d149a924ad749a58742a3b38dfefee1#1__2