解释对象调用中的代码函数

时间:2013-05-03 04:47:51

标签: python python-3.x

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

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

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

3 个答案:

答案 0 :(得分:2)

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

xy都指向同一个列表。

x[:] = [-1]*3

通过分配整个对象切片来修改该列表(参见here)。

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

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

顺便说一下:没有“按对象调用”。这只是对切片的赋值(如链接中所述,修改对象)。

答案 1 :(得分: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]

答案 2 :(得分:0)

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