您的位置:首页 > 编程语言 > Python开发

python数组的赋值和拷贝

2016-12-17 23:13 176 查看
直接看demo

numpy 有 copy()函数, list没有,需导入copy库

>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> (a==b).all() #比较两个数组元素是否都相等, 可以用于k-means
False
>>> c=a
>>> (a==c).all()
True
>>> c[0] = 10  #等号这种赋值相当对象引用(内存地址)传递,改变c, a也跟着变了,所有不管怎么改都是true
>>> (a==c).all()
True
>>> a
array([10,  2,  3])
>>> c
array([10,  2,  3])

>>> d = a.copy() #这是浅拷贝
>>> (a==d).all()
True
>>> a
array([10,  2,  3])
>>> d[0] =20
>>> (a==d).all()
False
>>> d
array([20,  2,  3])
>>> a
array([10,  2,  3])


ref: http://python.jobbole.com/82294/

Python中对象的赋值都是进行对象引用(内存地址)传递。

使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用, 但是当改变的list的元素是不可变类型,所以will对应的list的第一个元素会使用一个新的对象。

如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝。

对于非容器类型(如数字、字符串、和其他’原子’类型的对象)没有被拷贝一说。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python copy 赋值