直接看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:
python中物件的賦值都是進行物件引用(記憶體位址)傳遞。
使用copy.copy(),可以進行物件的淺拷貝,它複製了物件,但對於物件中的元素,依然使用原始的引用, 但是當改變的list的元素是不可變型別,所以will對應的list的第乙個元素會使用乙個新的物件。
如果需要複製乙個容器物件,以及它裡面的所有元素(包含元素的子元素),可以使用copy.deepcopy()進行深拷貝。
對於非容器型別(如數字、字串、和其他』原子』型別的物件)沒有被拷貝一說。
python賦值,淺拷貝和深拷貝
a 1 b a a 2 a 2 b 1 你將1賦給a變數,然後拷貝a中的值,將它賦給變數b。當稍 後將a中的值改變為2時,這不會影響b中的值。這是因為a和b 是不同的變數,儲存了不同的值。但列表不是這樣的。當你將列表賦給乙個變數時,實際上是將列表的 引用 賦給了該變數。引用是乙個值,指向某些資料。列...
Python下的深拷貝 淺拷貝和賦值
最近刷題時遇到關於拷貝的題。特別是在遞迴這種型別的問題是很容易踩坑。所以把這個總結下來。修改不可變物件 str tuple等 需要開闢新的空間 修改可變物件 list等 不需要開闢新的空間 import copy a 1,2,3,a b c b a 賦值 c copy.copy a 淺拷貝 d co...
python賦值 淺拷貝和深拷貝的區別
首先需要了解下幾個概念 例 當我們寫a python 時,python直譯器幹的事情 建立變數a 建立乙個物件 分配一塊記憶體 來儲存值 python 將變數與物件,通過指標連線起來,從變數到物件的連線稱之為引用 變數引用物件 在這裡插入描述 1 對於非容器型別,如數字,字元,以及其它 原子 型別,...