如何y等于x什么是对象调用但没有函数调用它是如何工作的如何y值是更改
y = [1, 2, 3]
x = y
x[:] = [-1]*3
print y
[-1, -1, -1]
请解释x和y中会发生什么以及对象调用是什么
答案 0 :(得分:2)
y = [1, 2, 3]
x = y
x
和y
都指向同一个列表。
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
现在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]
答案 2 :(得分:0)
列表是python中的一个对象,它不是一个简单的变量。就像c ++中的指针一样
x=y
只需让指针相等。对x的修改也将在y上实现,因为它们包含相同的对象。