Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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_Pass By Reference - Fatal编程技术网

在python中,按引用传递是什么时候发生的?

在python中,按引用传递是什么时候发生的?,python,pass-by-reference,Python,Pass By Reference,我有一个代码如下 attractions = [[] for i in range(5)] def add_attraction(attraction): attractions_for_destination = attractions[2] attractions_for_destination.append(attraction) return 第三行景点中出现了通过参考,目的地=景点[2]。通过引用传递的一般思想是,它发生在实际参数和形式参数之间。但上面这一行是一个简单

我有一个代码如下

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

def add_attraction(attraction):
  attractions_for_destination = attractions[2]
  attractions_for_destination.append(attraction)
  return 
第三行景点中出现了通过参考,目的地=景点[2]。通过引用传递的一般思想是,它发生在实际参数和形式参数之间。但上面这一行是一个简单的赋值代码。通过引用传递可以发生在简单的赋值代码中吗

如果是,如果我写

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

更改该值会迫使新生成的变量使用新的内存空间吗

说“按引用传递”或“按值传递”实际上不适用于python。例如,考虑java。Java中的所有内容都是按值传递的,所有内容都是按值传递的。但是,对象的值是对该对象的引用。因此,在某种程度上,它是通过引用传递的,因为对象的变化将反映到调用上下文中。将其称为pass-by-value有点令人困惑,因为对于习惯于C-family的人来说,这种区别更为直接,他们假设pass-by-value意味着不会修改传递的底层参数

所以说Java是通过值传递的是正确的,但可能令人困惑。在语言的较低级别上,它是一个更相关的语句,比如在讨论编译器如何处理传递参数时,而不是在应用程序程序员级别上

Python与此类似。Java示例的混乱实际上导致Python没有说明它是否是按值/引用传递的


因此,对于编程来说,假设任何对象都是通过引用传递的,从技术上说是,但本质上是。它比这更复杂,但该链接更深入地解释了它。

欢迎访问!我不确定这里问的是什么,或者我是否遵循了这个问题。Python从不按引用传递,对于初学者来说,它是按值传递的,所以我不明白数组元素的赋值与新的内存空间有什么关系。当然,变量param引用了一个对象,并且像这样更改元素的值会更改内存,但这似乎有点微不足道。你能澄清一下吗?Python从不使用按引用传递。从不Python使用单一的求值策略,既不是按引用调用,也不是按值调用。它使用,尽管它有很多不同的名称,但有时你也会听到赋值调用。@ggorlen不,绝对不是,Python不是按值传递的。如果是,参数将被复制。如果我做了:def foox:x.append42,那么y=[];福伊;printy将print[]本例中的值是一个对象引用,很像Java,它是按值传递的,但在调用中从不复制对象。该变量已复制,但它是对obj的引用。x是堆栈帧的本地对象如果将x重新指定给其他对象,它将停止指向它所表示的对象。这里有两个变量,x和y,都指向同一个对象。我决不是说你展示的代码在Python中是可能的,这根本不是我对传递值的理解;不同来源的术语不一致。例如,在Java社区中,他们说Java是按值调用的。这正是我的意思,我认为Java的问题在于在基本类型和引用类型之间存在着巨大的差异。Python纯粹是面向对象的,所以一切都是对象。一切都是引用类型。人们需要了解的最重要的一点是,评估策略不是按引用调用和按值调用之间的二分法,有几种不同的选择。我想说Python从不使用按引用传递。如果有,您可以执行def foo&x:x=42;y=0;福伊;printx,你会得到42。在Python中无法做到这一点。