Python 赋值与拷贝

之前对Python的拷贝和赋值一直很疑惑,今天认真研究了一下,终于弄明白了。
Python的复制操作为了高效,赋值右面的操作数是字面值,如字符串或数字,那么右面的操作数被设置为一个对象引用,该对象引用将指向存放字面值的内存对象。

a=123
b=a
a=321

print(a) # 321
print(b) #123

如果赋值右面是对象引用,那么左面的操作数将设置为一个对象引用,并与右面的操作数指向同一个对象。

class MyClass(object):
    a=123

class1 = MyClass()
class2 = class1
class1.a=321

print(class1.a) # 321
print(class2.a) # 321

对象引用

195219_lUGe_1452722.png

因为class1和class2指向的是同一对象,所以class1.a改变时,class2就会改变

拷贝分为浅拷贝和深拷贝

字典和集合通过copy()函数可以返回对象副本。从外copy模块也提供了copy.copy()函数,返回给定对象副本。

class3=copy.copy(class1)
class1.a=456


print(class1.a) # 456
print(class3.a) # 321

如果属性是对象引用,那么浅拷贝没有拷贝属性的对象副本,只能通过深拷贝,将内部所有的对象拷贝新的副本,仅限于组合数据类型。如果向上面自定义的类深度拷贝也是不行的,需要重写类的__deepcopy__函数。

第一次写博客,有什么错误希望大家多多指正,谢谢!

转载于:https://my.oschina.net/superroy/blog/778809

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值