为什么Python中的列表参数与ByRef一样?

Aus*_*tin 1 python reference object-reference argument-passing

这可能适用于大多数语言,但我不确定.我是Python的初学者,一直致力于C#和VB中的列表副本.但是在Python中,只要我将列表作为参数传递并通过使用"for i in range"进行枚举,然后更改list参数的值,输入值实际上会更改原始列表.我认为Python应该默认按值传递参数,这样一旦函数完成,我仍然会在调用函数之前得到原始值.我错过了什么?谢谢!

And*_*are 8

Python确实按值传递参数,但是您接收的值是引用的副本(顺便说一句,这与C#,VB.NET和Java的行为完全相同).

这是要记住的重要事项:

对象不通过引用传递 - 对象引用按值传递.

由于您有一个引用的副本,因此对该引用所指向的任何操作就像您自己持有原始引用一样.

  • 人们常常想知道通过引用传递和按值传递引用之间的区别是什么.不同之处在于,当您通过引用传递x时,"x = new_value"将更改被调用者变量的值(其中x是参数名称).这不会发生在Python(或安德鲁提到的其他语言)中,这就是为什么我们不说它们通过引用传递. (2认同)
  • 是的,它就像按值传递指针一样. (2认同)