在python中,何时通过引用传递?

问题描述 投票:0回答:1

我有如下代码,

attractions = [[] for i in range(5)]

def add_attraction(attraction):
  attractions_for_destination = attractions[2]
  attractions_for_destination.append(attraction)
  return 

通过引用在第三行“ attractions_for_destination =景点[2]”中发生。我拥有的按引用传递的一般思想是它发生在实际参数和形式参数之间。但是上面的代码是一个简单的赋值代码。可以通过简单的分配代码进行引用传递吗?

如果是这样,如果我写

attractions_for_destination = attractions[2] + ": best attraction site"

更改值将强制新创建的变量使用新的存储空间吗?

python pass-by-reference
1个回答
1
投票

说按引用传递或按值传递实际上不适用于python。例如考虑Java。 Java中的一切都是通过价值传递的,一切都是通过价值传递的。但是,对象的值是对该对象的引用。因此,在某种程度上,它是通过引用传递的,因为使对象发生变异将反映到调用上下文中。称其为“按值传递”有点令人困惑,因为对于习惯C族的人(这种区别更直接),他们认为按值传递意味着您不会修改所传递的基础参数。

所以说Java是“按值传递”是正确的,但可能会造成混淆。它在语言的低得多的级别上是一个更相关的语句(例如,在谈论编译器如何处理传递参数时,而不是在应用程序程序员级别上)。

Python很相似。关于Java示例的困惑实际上导致Python无法说明它是否通过值/引用传递。 http://stupidpythonideas.blogspot.com/2013/11/does-python-pass-by-value-or-by.html

因此,对于编程,可以省去假定任何对象都被“引用传递”(技术上是否,但本质上是)。它比这更复杂,但是该链接更深入地解释了它。

© www.soinside.com 2019 - 2024. All rights reserved.