为什么Python中的列表会这样做?

7 浏览
0 Comments

为什么Python中的列表会这样做?

这个问题已经在这里有答案了:

如何通过引用传递变量?

当你把像列表、数组这样的集合传递给python中的另一个函数时,它会复制它,还是只是一个指针?

admin 更改状态以发布 2023年5月20日
0
0 Comments

事实是,整个引用/值的概念无法适用于Python。Python没有变量的“值”。Python只有对象和指向对象的名称。\n\n因此,当您调用函数并将“名称”放在括号内时,如下所示:\n\n

def func(x): # defines a function that takes an argument
    ... # do something here
func(myname) # calling the function

\n\n实际传递的是指向myname的对象,而不是myname本身。在函数中,会赋予另一个名称x)以引用传递的同一对象。\n\n如果它是可变的,则可以在函数内部修改对象,但是无法更改外部名称的指向,就像执行以下操作时一样。\n\n

anothername = myname

\n\n因此,我可以回答您的问题:这是“传值调用”,但是所有值都只是指向对象的引用。

0
0 Comments

Python通过值来传递对象引用,每个Python都是一个对象。虽然这听起来很简单,但你可能会注意到一些数据类型似乎表现出传递值的特性,而另一些则表现得像引用传递… 到底怎么回事呢?

理解可变和不可变对象非常重要。一些对象,如字符串、元组和数字,是不可变的。 在函数/方法内对它们进行更改将创建一个新实例,并且函数/方法外部的原始实例不会更改。 另一些对象,如列表和字典是可变的,这意味着你可以就地更改对象。 因此,在函数/方法内部更改对象也会更改外部的原始对象。

0