【发布时间】:2015-09-13 02:14:39
【问题描述】:
sn-ps
xi = xrange(10)
zip(xi,xi)
和
xi = iter(range(10))
zip(xi,xi)
表现不同。我希望得到
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
在第一个 sn-p 中也是如此,但它返回
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]
相反。似乎隐式容器正在被默默复制。谁能解释这里发生了什么?以及选择这种语义的原因。
>>> sys.version
'2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)]'
【问题讨论】:
-
"似乎隐式容器正在被静默复制。" - 你的意思是?为什么需要一个副本来产生观察到的行为?你对
xi = [1, 2, 3, 4]; zip(xi, xi)有什么期望? -
(此外,尽管人们一遍又一遍地称它为生成器,但 xrange 并不是生成器。xrange 是不可变的序列。)
-
@user2357112 你的第二条评论解释了它。我希望 xrange 作为生成器是“有状态的”,而不是不可变的。