[问题] 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