-1

如何 y 等于 x 对象调用什么但没有函数调用 它是如何工作的 如何改变 y 值

y = [1, 2, 3]
x = y
x[:] = [-1]*3
print y
[-1, -1, -1]

请解释 x 和 y 会发生什么以及对象调用什么

4

3 回答 3

2
y = [1, 2, 3]
x = y

x并且y都指向同一个列表。

x[:] = [-1]*3

该列表通过分配给整个对象切片的方式进行了修改(请参见此处)。

print y
# [-1, -1, -1]

修改后的列表打印到控制台。

顺便说一句:没有“对象调用”。这只是分配给切片(如链接中所述,修改对象)。

于 2013-05-03T04:56:25.960 回答
2

通过这样做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

现在xy指向内存中的同一个对象:

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]
于 2013-05-03T04:56:45.877 回答
0

列表在python中是一个对象,它不是一个简单的变量。就像c ++中
x=y的指针一样,让指针相等。对x的修改也会在y上实现,因为它们包含相同的对象。

于 2013-05-03T04:57:27.807 回答