簡體   English   中英

在python 3.x中的for循環中,對象是否更改為不可變的?

[英]In a for loop in python 3.x are objects changed to immutable?

在粘貼下面的代碼(是python 3代碼)中,我期望for循環可以更改原始對象(即,我希望NSTEPx已被for循環更改)。 由於列表和數組是可變的,因此我應該通過變量“ data”引用該對象來編輯該對象。 但是,運行此代碼后,我調用了NSTEPx,但它沒有更改。 有人可以解釋為什么嗎? 我來自C ++的背景,而可變和不可變對象的想法只是我最近才了解的細微差別,我以為如此。

這是代碼:

NSTEPx = np.array(NSTEPx)
TIMEx = np.array(TIMEx)
TEMPx = np.array(TEMPx)
PRESSx = np.array(PRESSx)
Etotx = np.array(Etotx)
EKtotx = np.array(EKtotx)
EPtotx = np.array(EPtotx)
VOLUMEx = np.array(VOLUMEx)
alldata = [NSTEPx,TIMEx,TEMPx, PRESSx, Etotx, EKtotx, EPtotx]
for data in alldata:
    temp = data[1001:-1]
    data = np.insert(data,0,temp)
    data = np.delete(data,np.s_[1001:-1])

在循環中, data引用數組(某個對象)。 引用的對象是可變的。 變量data也可以更改為引用其他內容,但這不會更改alldata (引用對象的值)或隱式復制其內容以構造alldata的變量中的內容。 因此,您alldata更改只是一個局部變量(從alldata隱式復制)以引用新創建的數組。 其他所有引用值均保持不變,但仍引用舊數組。

Python 沒有分配! data = value嚴格來說是綁定操作,而不是賦值。 確實與例如C ++不同

Python變量就像一個標簽或一個黃色便簽:您可以將其放在其他對象上或將其移動到其他對象上; 它不會( 永遠不會 )改變事物 (對象)為一體。 =運算符確實會移動標簽; 它“綁定”它。 盡管我們通常說出Assign ,但實際上不是C的賦值。(它基本上是一個內存地址)

要使用Python更改值,您需要一個方法: aLabel.do_update() ,(通常)將更改self ,即對象本身。 注意aList[....]是一種方法!

因此,要更改您的數據:更改它(秒)。 不要在上面貼上其他標簽,也不要在其他數據上貼上現有標簽!

希望這能解釋您的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM