作者why8ther (外八喵)
看板Python
標題[問題] a[1:3]會馬上複製嗎?
時間Mon Jul 13 16:52:20 2015
已知:
>>> 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文 請大家多多指教
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.96.27.107
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1436777542.A.324.html
1F:推 eric781101: 第二行,把a[1:3] assign給變數b 07/13 17:01
2F:→ eric781101: b與a無關,是獨立的變數 07/13 17:03
3F:→ uranusjr: 沒看 source, 但我猜應該不會, 這是很常見的最佳化 07/13 17:53
4F:→ uranusjr: 如果真的需要保證, 可以改用 memory view 來替代 07/13 17:54
5F:→ uranusjr: 喔我錯了, 好像會 shallow copy, 沒有 implicit sharing 07/13 17:58
6F:→ ck574b027: 用 b = a[:] 就很清楚了,會直接產生新物件 07/13 20:10
7F:推 LiloHuang: Python 的 list 並沒有實作 copy-on-write 07/13 22:14
8F:→ why8ther: 瞭解 謝謝大家 看來要改寫法了QQ 07/13 22:43
9F:→ bibo9901: 看來你不想要複製? 那可以用 itertools.islice 07/14 11:43