Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解释“按对象调用”中的代码函数_Python_Python 3.x - Fatal编程技术网

Python 解释“按对象调用”中的代码函数

Python 解释“按对象调用”中的代码函数,python,python-3.x,Python,Python 3.x,如何使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 该列表将通过指定给整个对象切片的方式进行修改(请参见) 修改后的列表将打印到控制台 顺便说一句:没有“对象调用”。这只是对一个切片的赋值(如链接中所述,该切片修改对象)。通过执行x

如何使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
该列表将通过指定给整个对象切片的方式进行修改(请参见)

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


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

通过执行
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上实现,因为它们包含相同的对象

这里没有函数调用。您能更清楚地解释您的问题吗?是否有人真的已经决定使用甚至go想做的看起来更像?感谢您的评论感谢您宝贵的输入。。。。
>>> del y
>>> x        #but you can still access that object using x
[1, 2, 3, 4]