直接看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()进行深拷贝。
对于非容器类型(如数字、字符串、和其他’原子’类型的对象)没有被拷贝一说。