首先,您不能重新分配循环变量-可以,但是,这不会更改您要遍历的列表。因此,设置
foo =0将不会更改列表,而只会更改局部变量
foo(该变量恰好包含每次迭代开始时的迭代值)。
接下来,小数字(例如
0和)
1内部保存在小整数对象的池中(这是CPython实现的细节,不必是这种情况!)这就是为什么在
foo为其分配ID后,ID相同的原因
0。id基本上
0是池中该整数对象的id
。
如果要在遍历列表时更改列表,很不幸,您将不得不按索引访问元素。因此,如果要保持输出不变,但
[0, 0, 0]最后要保留输出,则必须遍历索引:
for i in range(len(bar)): print id(bar[i]) bar[i] = 0 print id(bar[i])print bar
否则,这实际上是不可能的,因为一旦将列表的元素存储在变量中,就会有一个单独的引用,该引用未链接到存储在列表中的元素。并且由于大多数这些对象都是不可变的,并且在为变量分配新值时创建了一个新对象,因此您将无法获取列表的引用进行更新。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)