[問題] a[1:3]會馬上複製嗎?

作者: why8ther (外八喵)   2015-07-13 16:52:20
已知:
>>> a = [1,2,3,4]
>>> b = a[1:3]
b = [2, 3]
>>> b[0] = 99
b = [99, 3]
a = [1, 2, 3, 4]
由此可知,黃色那行的值並不會改動到a陣列,而是創造一個副本了
我的問題是 :
這個副本是(1) 在我呼叫a[1:3]時就被創造了?
抑或(2) 直到我改動b[0]才被創造,若不改動就永遠參照本來陣列
因為最近遇到比較高的性能要求 需要弄清楚@@
第一次po文 請大家多多指教
作者: eric781101   2015-07-13 17:01:00
第二行,把a[1:3] assign給變數bb與a無關,是獨立的變數
作者: uranusjr (←這人是超級笨蛋)   2015-07-13 17:53:00
沒看 source, 但我猜應該不會, 這是很常見的最佳化如果真的需要保證, 可以改用 memory view 來替代喔我錯了, 好像會 shallow copy, 沒有 implicit sharing
作者: ck574b027 (荒圍!定厝!賊!妹!)   2015-07-13 20:10:00
用 b = a[:] 就很清楚了,會直接產生新物件
作者: LiloHuang (十年一刻)   2015-07-13 22:14:00
Python 的 list 並沒有實作 copy-on-write
作者: why8ther (外八喵)   2015-07-13 22:43:00
瞭解 謝謝大家 看來要改寫法了QQ
作者: bibo9901 (function(){})()   2015-07-14 11:43:00
看來你不想要複製? 那可以用 itertools.islice

Links booklink

Contact Us: admin [ a t ] ucptt.com