看板 Python 關於我們 聯絡資訊
已知: >>> 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://www.ptt.cc/bbs/Python/M.1436777542.A.324.html
eric781101: 第二行,把a[1:3] assign給變數b 07/13 17:01
eric781101: b與a無關,是獨立的變數 07/13 17:03
uranusjr: 沒看 source, 但我猜應該不會, 這是很常見的最佳化 07/13 17:53
uranusjr: 如果真的需要保證, 可以改用 memory view 來替代 07/13 17:54
uranusjr: 喔我錯了, 好像會 shallow copy, 沒有 implicit sharing 07/13 17:58
ck574b027: 用 b = a[:] 就很清楚了,會直接產生新物件 07/13 20:10
LiloHuang: Python 的 list 並沒有實作 copy-on-write 07/13 22:14
why8ther: 瞭解 謝謝大家 看來要改寫法了QQ 07/13 22:43
bibo9901: 看來你不想要複製? 那可以用 itertools.islice 07/14 11:43