Python中的深拷贝与浅拷贝

浅拷贝只拷贝了最顶层的,深拷贝拷贝了所有

拷贝牵扯到以下几种形式:

  • 赋值操作符=
  • copy.copy
  • copy.deepcopy
  • 列表中的切片[:]
  • 字典中的拷贝.copy()
  • 列表作为函数参数

1. 当拷贝内容为可变类型时

首先以列表为例,来看python中的深拷贝与浅拷贝:

如下图,a和b的地址是一样的,b只是指向了a的地址。

copy.copy后,d只是开辟了一段新的空间,拷贝了c的引用

copy.deepcopy,是直接拷贝了内容。

 简单总结:=就是指向原地址,copy.copy会开辟一个新地址,内部拷贝了可变类型当时的引用;copy.deepcopy所有元素都拷贝

2. 当拷贝内容为不可变类型时

这里以元组为例

简单总结:当拷贝的内容为不可变类型,无论哪种方法都只是简单引用,不会开辟新地址

3. 当拷贝内容为不可变类型但包含可变类型

简单总结:只要包含可变元素,deepcopy就完全拷贝

4. 列表切片中的拷贝

简单总结:列表切片中的拷贝,可copy.copy一样,是浅拷贝

5. 字典中的拷贝

基本认识:字典是无序的,每一个key通过哈希来得到,字典中存储的是key的引用

6. 列表作为函数参数传入

原文地址:https://www.cnblogs.com/yunxiaofei/p/11185362.html