关于赋值与深浅复制

Posted Guan_zi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于赋值与深浅复制相关的知识,希望对你有一定的参考价值。

赋值

在python中,赋值语句是建立对象的引用,而不是复制对象,变量就像一个指针。例如

id函数获得的是对象的内存地址,如果两个对象内存地址一样,说明这两个对象是同一个对象,id(a) == id(b)就相当于a is b。

上述例子输出结果都一样,说明alist 和blist是一样的,指向相同的内存空间,blist是alist的一个引用。

赋值操作不会开辟新的内存地址空间,只是增加一个对象引用。由于指向的是同一片地址空间修改了alist,另一个也会改变。

 

浅拷贝

浅拷贝会产生新的对象,其内容是原内容的索引

浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy方法

clist 的每个元素都与alist的元素地址相同,clist的元素是alist的元素一个引用,但是clist的地址与alist不同,他们是两个不同的对象,因此修改clist理论上不会影响alist。

dlist更新了,但是alist并未更新。

但是浅拷贝之所以被称为浅拷贝,是因为它只拷贝了一层,如果list中嵌套有list,如果修改了嵌套的list情况将不一样。

输出是一样的,这是因为,修改了外层的元素会修改他的引用,让他们指向别的地址,但是修改嵌套列表中的元素,列表地址并未发生变化指向的还是同一位置。

 

深拷贝

深拷贝是在拷贝的基础之上,把嵌套的元素也改变了,因此他的时间和空间开销都要高,修改一个对象另一个对象并不会发生变化。

 

以上是关于关于赋值与深浅复制的主要内容,如果未能解决你的问题,请参考以下文章

2019-04-15 python深浅复制

深浅拷贝,赋值

深浅拷贝

python的复制,深拷贝和浅拷贝的区别

(二十五)python 3 深浅拷贝

关于:1.指针与对象;2.深浅拷贝(复制);3.可变与不可变对象;4.copy与mutableCopy的一些理解