解释obj调用中的代码函数

2024-04-20 00:01:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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


Tags: 对象print函数调用
3条回答

通过执行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]

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

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

xy都指向同一个列表。你知道吗

x[:] = [-1]*3

通过分配给整个对象片(参见here),该列表被修改。你知道吗

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

修改后的列表将打印到控制台。你知道吗

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

相关问题 更多 >