如何 y 等于 x 对象调用什么但没有函数调用 它是如何工作的 如何改变 y 值
y = [1, 2, 3]
x = y
x[:] = [-1]*3
print y
[-1, -1, -1]
请解释 x 和 y 会发生什么以及对象调用什么
如何 y 等于 x 对象调用什么但没有函数调用 它是如何工作的 如何改变 y 值
y = [1, 2, 3]
x = y
x[:] = [-1]*3
print y
[-1, -1, -1]
请解释 x 和 y 会发生什么以及对象调用什么
y = [1, 2, 3]
x = y
x
并且y
都指向同一个列表。
x[:] = [-1]*3
该列表通过分配给整个对象切片的方式进行了修改(请参见此处)。
print y
# [-1, -1, -1]
修改后的列表打印到控制台。
顺便说一句:没有“对象调用”。这只是分配给切片(如链接中所述,修改对象)。
通过这样做x=y
,您只需创建对同一对象的两个引用,并且该对象是可变的,因此您也可以对其进行修改。
>>> y = [1, 2, 3]
>>> sys.getrefcount(y)
2
>>> x = y # now y also points to the same object
>>> sys.getrefcount(y)
3
>>> x is y
True
现在x
并y
指向内存中的同一个对象:
X-----------------------|
|
--------------
| [1, 2, 3] |
| |
|------------|
|
|
Y-----------------------|
现在使用任何引用修改该对象:
>>> x.append(4) #modify object using either x or y
>>> x,y
([1, 2, 3, 4], [1, 2, 3, 4])
现在删除对该对象的一个引用,比如 y:
>>> del y
>>> x #but you can still access that object using x
[1, 2, 3, 4]
列表在python中是一个对象,它不是一个简单的变量。就像c ++中
x=y
的指针一样,让指针相等。对x的修改也会在y上实现,因为它们包含相同的对象。