【发布时间】:2020-05-23 21:56:26
【问题描述】:
在 python 3.7 上,我希望每次调用 iterator.cycle 时都会获得一个新的内存地址(和循环),但是,这段代码在 4 上复制了 2 个迭代器:
from itertools import cycle
cycles = [[None] * 2] * 2
s = set()
for i in range(2):
for j in range(2):
c = cycle("ab")
cycles[i][j] =c
s.add(hex(id(c)))
print(hex(id(c)))
print(len(s))
打印出来:
0x7efe576cc370
0x7efe576cc3c0
0x7efe576cc410
0x7efe576cc370
3
所以对象0x7efe576cc370 被使用了两次。另一方面,这段代码有效:
from itertools import cycle
cycles = []
for _ in range(1000):
c = cycle("ab")
cycles.append(c)
s = set([hex(id(c)) for c in cycles])
print(len(s)) # 1000
【问题讨论】:
标签: python memory-address cycle