Python中"=“,浅复制和深复制的理解

(1)赋值语句“=”的理解
在Python中,对象的管理是通过对象引用计数器来实现的。如果某个对象的引用计数器变为0时,那么该实例化对象将无法再被获取,系统会自动将其消亡并回收相应的内存,这也是内存管理机制。而赋值语句,其实就是将一个对象的引用传递给某个变量,具体解释看下面的例子。

</pre><p></p><pre name="code" class="python">>>>> x=[1,2,3]
>>> y=x
>>> x=[]
>>> y
[1, 2, 3]
>>> 
在上述例子中,我创建了一个列表对象,并将该对象的引用赋值给了x;接着,我又将该对象的引用通过x赋值给了y,这样y其实就是对列表[1,2,3]的引用。而x=[ ]语句,创建了一个空列表,并将引用赋值给x,此时x将不再指向列表[1,2,3]。

总结说来,赋值语句“=”伴随着对象引用的创建和转移。

(2)浅复制 copy()的理解

先看一个例子:

>>> x=[1,[2,3]]
>>> y=x.copy()
>>> y
[1, [2, 3]]
>>> y[0]=2
>>> x
[1, [2, 3]]
>>> y[1].append(4)
>>> y
[2, [2, 3, 4]]
>>> x
[1, [2, 3, 4]]
浅复制会创建新的内存来保存一些东西,但是它并不会将原对像进行彻底的复制。它会对字符串、数值类型进行值的复制,但是对列表、字典来说,它仅仅复制引用。也就是说,浅复制仅仅复制表层的一些东西,对于子对象并不复制。所以,可以看到,当对y的子列表修改时,x也会跟着变化。

(3)深复制 deepcopy()的理解

>>> from copy import deepcopy
>>> x=[1,[2,3]]
>>> y=deepcopy(x)
>>> y[1].append(4)
>>> y
[1, [2, 3, 4]]
>>> x
[1, [2, 3]]
>>> 
与上面的例子相对比,可以看出,深复制会将原对象彻底的复制,无论是表层还是子对象。需要说明的一点是,在使用deepcopy()时,将先将模块导入。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值