x=5
y=x
x=7
# Changing the value of x does not effect the value of y
作为一个简单的例子,x
&y
有不同的内存位置,所以改变一个不影响其他
但是在下面的代码中next(y)
给4
为什么?根据我的逻辑,我错的地方一定是1
a=[1,2,3,4,5,6,7,8,9,10]
x=iter(a)
y=x
print(next(x))
print(next(x))
print(next(x))
print(next(y))
执行y=x
创建的命名引用y
基本上指向与变量x
指向的相同的内存位置,您可以使用内置的id
(给出内存位置表示)来验证它:
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> x=iter(a)
>>> y=x
>>> id(x)
1714277910984
>>> id(y)
1714277910984
如果你想要一个迭代器x
的副本,你可以使用copy
模块中的deepcopy
函数:
>>> from copy import deepcopy
>>> y = deepcopy(x)
>>> id(x)
1714277910984
>>> id(y)
1714135198792
现在x
和y
是两个不同的迭代器:
>>> next(x)
1
>>> next(y)
1
>>> next(x)
2
>>> next(y)
2
在第一个例子中
x=5
y=x
x=7
第二行之后,x
和y
指向同一个对象,即5
。当您更改x
时,y
保持5,因为您没有更改对象5
本身,但您只是更改了x
指向的位置。然而,在第二个例子中,
a=[1,2,3,4,5,6,7,8,9,10]
x=iter(a)
y=x
print(next(x))
print(next(x))
print(next(x))
print(next(y))
x
和y
仍然指向相同的位置。但是当你调用next
方法时,你是在改变那个位置的对象,而不是在另一个位置创建一个新对象。