Python ·

简析Python中的深浅拷贝

深拷贝浅拷贝,python中一切皆对象,像数字,字符串元祖,如果在内存中存储了这些元素,那么这块内存中的值是不可以被修改的,但是还存在一些可变对象,比如列表和字典,他们所占有的内存空间是可以修改的,有因为python中使用的是引用计数去节省内存。
首先我们定义一个列表并引用:

注:id函数的意思是返回对象object的标识符,标识符类型为整数,在同一个时间里所有对象的标识符是唯一的,如果在不同生命周期的对象有可能有相同的标识符。
例如:我们把list中的第一个数改变的话我们发现list1也随之改变,问什么会出现这种情况呢,这是因为python中使用的是引用计数去节省内存。(这句话上面提到过)

但是我们往往只想修改list而不改变list1,怎么实现呢我们可以通过切片拷贝
2、浅拷贝
切片方式实现浅拷贝
首先我们删除list1

接下来我们只改变list中的值

但是这样只适合外层拷贝,接下来我们将里层的列表修改看看会发生什么
首先我们删除list1,并重新赋值

总结一下:当你使用切片操作拷贝的时候,我们修改了外层的列表,外层不随之改变,但是修改里层的子列表时,却会改变。
除此之外浅拷贝还有第二种方式,及插入copy模块
copy模块实现浅拷贝
首先我们删除列表,并插入模块

定义列表并对外层内层赋值


#这里我们发现外层没有随之改变,但是里层却跟着变了,这就是copy模块实现浅拷贝,但是我们想实现互不影响那我们使用深拷贝

3、深拷贝
使用deepcopy函数
首先我们删除list1并重新赋值

4、总结:
浅拷贝:不会拷贝数据中的子对象
切片拷贝,import copy copy.copy()
深拷贝:会拷贝数据中的子对象
import copy.deepcopy

关注运维天涯微信、新浪微博

评论已关闭