作者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/cn.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