python 对象拷贝

python标准库的copy模块提供了两个函数来创建拷贝。第一个常用的函数式copy,它会返回一个具有同样的内容和属性的对象。

import copy new_list=copy.copy(list)

某些特殊的时候,你可能会需要对象中的属性和内容被分别递归的拷贝,这个时候可以使用deepcopy

import copy new_list=copy.deepcopy(list)

当给一个对象赋值(或者将其作为参数传递,或者作为结果返回),python和java一样使用一个指向原对象的引用,并不是真正的拷贝。python从来不为赋值操作进行‘隐士’拷贝:要得到一个拷贝,必须明确的要求,需要的是拷贝。

a=[1,2,3,4] b=a b.append(5) print(a) print(b) print(a is b)

#[1, 2, 3, 4, 5] #[1, 2, 3, 4, 5] #True 这里,名字a和b都引用到同样的对象列表a,所以无论我们通过哪个名字修改了对象的内容,修改的结果都是一样的,这个过程过程中并没有一个原始的未被修改的拷贝。

提示: 要成为一个好的python,必须了解修改对象和将对象赋值给变量的区别,赋值使用的是引用。这两种操作相互之间并没有什么关联。类似a=[]这种语句,是对a做了重新绑定,但却不会影响原来绑定到的a对象。因此,这里完全没有引用和拷贝的问题:只有当需要修改某些对象的时候,引用和拷贝才有可能成为问题。

如果想修改一个对象,但又不需要改动原对象,必须做一个拷贝。

转载于:https://my.oschina.net/u/1046518/blog/142471

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值