python陣列的賦值和拷貝

2021-07-25 11:10:07 字數 964 閱讀 5732

直接看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 對於非容器型別,如數字,字元,以及其它 原子 型別,...