Python 為什麼要設計分片賦值?

時間 2021-06-01 01:54:59

1樓:

個人覺的, 分片賦值有過度設計的嫌疑. 純粹乙個分片取值的方法就好了, 為何還要搞出乙個分片賦值呢?

分片賦值要比獲取分片要考慮更多的事情, 除了深拷貝淺拷貝的問題, 還需要考慮源列表大小不等於目標列表分片的大小的問題. 坑爹的是Python3在這一點上, 對步進為1和大於1(絕對值)的處理方式還不一樣

2樓:

a[:] 返回的是shallow copy。但是a[:

]=[1,2] 這裡的 a[:]不需要返回任何東西,這只是乙個index的syntactic sugar。基本上屬於樓上說的__SETITEM__(a,[:

],[1,2])這樣。這兩者沒有矛盾。

真正矛盾和麻煩的是在於python處理identity和deep copy的時候。

3樓:宇宬

a = [1,2,3,4]

b = a[1:3]

print id(a[1]), id(b[0])# string slice

c = '1234'

d = c[1:3]

print id(c[1]), id(d[0])題主可以先思考一下輸出是什麼,再往下看

-------

結果是,id(a[1])和id(b[0])相同,id(c[1])和id(d[0])相同。

也就是說無論slice的操作物件是否mutable,slice總是返回reference,題主說的「分片應該返回拷貝」是錯誤的。

同樣,這個例子中:

a = [ 1, 2, 3, 4 ]

b = a[1:3]

id(a[1])和id(b[0])也是相同的。

希望回答有助於題主理解 :P

4樓:洋爺吉祥

1、當你把分片賦給乙個新物件,比如b,系統就會新開闢記憶體儲存這個分片b,你的操作就有a,b

之分。2、當你持有這個分片,單純的進行操作,就不會開闢新記憶體,所有的操作就會針對原有的a。

不要糾結於拷貝、引用概念。單純從記憶體棧來看。

至於為什麼分片,你可以體會一下別的語言整體賦值的酸爽。

為什麼 Python 3 0 設計成不與 Python 2 X 相容?主要有哪些地方需要突破才導致這一決定?

幾年前我就關注問題了,當時人語曰 只要Django支援了Python3,Python3就會成為主流 而現在,Django支援了Python3,Tornado也支援,NumPy那一幹等也是支援的,但是Python3怎麼還在徘徊呢?這不科學啊。難道是慣性? 字元編碼問題,直接用 unicode 統一可以...

為什麼python的裝飾器要雙層巢狀?

無名 努力寫個簡短而又通俗的回答!decorator defmy func 等價於 defmy func my func decorator my func 可見裝飾器是乙個函式,它的input是原函式,output是裝飾後的函式。在裝飾器裡,基於原函式,構造出乙個新函式,看起來就像是雙層巢狀。de...

為什麼要設計使用者等級?

已上回答都是站在非使用者角度,但區分等級這件事的受眾是使用者,我們為什麼要對使用者做分群?這個回答應來自使用者的需求,站在使用者角度考慮這個策略到底是怎麼產生的 我個人認為對使用者分群,是為了滿足不同使用者對產品 服務不同層次的要求 Case 你是乙個開麵館的,你提供的選單就是服務,有的人一碗面就滿...