2 回答

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
我更喜歡談?wù)搶?duì)象和引用,而不是價(jià)值觀。所以我會(huì)把你的第一個(gè)代碼描述為:
這將創(chuàng)建一個(gè)ndarray
對(duì)象,并將其(或?qū)λ囊茫┓峙浣othis_arr
:
this_arr = np.ones(10)
并將相同的引用分配給next_arr
:
next_arr = this_arr
所以next_arr
和this_arr
引用同一個(gè)對(duì)象。
然后對(duì)數(shù)組對(duì)象進(jìn)行“就地”更改。使用哪個(gè)名稱并不重要。
next_arr *= 2
這兩個(gè)名稱仍然引用同一個(gè)數(shù)組對(duì)象。(在幕后做*=
一些緩沖,但數(shù)組對(duì)象和數(shù)據(jù)緩沖區(qū)位置保持不變)。另一個(gè)可變的變化是next_arr[1] = 10
(對(duì)于列表對(duì)象也是如此)。
和
next_arr = next_arr * 2
乘法生成一個(gè)新的數(shù)組對(duì)象。那被分配給next_arr
,打破了與先前引用對(duì)象(this_arr
仍然引用)的任何鏈接。
如果id(this_arr)
和id(next_arr)
相同,則引用該對(duì)象。大致id
是一個(gè)位置 - 但與c
. 但要注意隨著時(shí)間的推移比較 id;它們可以被重復(fù)使用。
arr.__array_interface__
是另一個(gè)方便的工具。If 有一個(gè)data
鍵告訴我們數(shù)組的底層數(shù)據(jù)緩沖區(qū)位于何處。但是要了解您需要了解數(shù)組的存儲(chǔ)方式以及 和 之間的view
區(qū)別copy
。

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)您初始化 next_arr=this_arr 時(shí),它實(shí)際上所做的是將 this_arr 位置的值復(fù)制到 next_arr 的新位置。這是我對(duì)這段代碼的理解,否則這種行為是不可能的
添加回答
舉報(bào)