Python 是否类似于 C/C++ 中的 -> 运算符?
Is Python similar to the -> operator in C/C++?
因此在 Python 中您可以执行以下操作:
def append(_list):
_list.append(1)
_list = [0]
append(_list)
print(_list)
这显然允许我将 1 追加到列表中,但是如果我在追加函数中更改列表的引用,它不会改变(这是预期的,因为传递对象引用)。 Java 的工作原理类似,但它被认为是按引用传递。这是否仅仅意味着 Python 就像 C++ 一样,它传递一个按值指向对象的指针然后取消引用(有点像使用 C/C++ 的 -> 运算符)?
在Python中,一切都是对堆的引用。在 Java 中,您可以拥有驻留在堆栈上的原始类型,这些原始类型不引用堆上的任何内容,但其他所有内容都是对堆上对象(甚至是原始数组)的引用。
在函数调用期间,引用(或原语)被复制到 Java 和 Python 中的新堆栈帧。
C 可以将复杂的结构(如结构和数组)放在堆栈上。但是在 Python 中没有不引用的堆栈对象的概念。这与在 C 中非常不同,在 C 中,您不仅可以将对象复制到新的堆栈帧,而且实际上可以将指针传递给位于较早堆栈帧上的对象。
Python 中的重要区别不是按值传递或引用,而是可变对象和不可变对象之间的区别。
一切基本上都是通过引用传递的,但是如果对象不允许您修改它(它是不可变的),您就不能更改传递引用的原始对象。例如 Python ints
是不可变的,因此即使 int 是通过引用传递的,您也永远无法修改原始对象。如果你想这样做,你必须将对象包装在一个可变对象中,例如一个列表。可以修改列表(追加、弹出等)
所以你 "could" 说 Python 的属性访问 .
类似于 C++ ->
但这是 [=23 的一种奇怪的术语=].
在您的示例中,您传递了一个可变对象(列表)。所以追加会修改原来的对象。因此,您的代码的输出是 [0, 1]
。 (你应该把它包括在你的问题中。)
因此在 Python 中您可以执行以下操作:
def append(_list):
_list.append(1)
_list = [0]
append(_list)
print(_list)
这显然允许我将 1 追加到列表中,但是如果我在追加函数中更改列表的引用,它不会改变(这是预期的,因为传递对象引用)。 Java 的工作原理类似,但它被认为是按引用传递。这是否仅仅意味着 Python 就像 C++ 一样,它传递一个按值指向对象的指针然后取消引用(有点像使用 C/C++ 的 -> 运算符)?
在Python中,一切都是对堆的引用。在 Java 中,您可以拥有驻留在堆栈上的原始类型,这些原始类型不引用堆上的任何内容,但其他所有内容都是对堆上对象(甚至是原始数组)的引用。
在函数调用期间,引用(或原语)被复制到 Java 和 Python 中的新堆栈帧。
C 可以将复杂的结构(如结构和数组)放在堆栈上。但是在 Python 中没有不引用的堆栈对象的概念。这与在 C 中非常不同,在 C 中,您不仅可以将对象复制到新的堆栈帧,而且实际上可以将指针传递给位于较早堆栈帧上的对象。
Python 中的重要区别不是按值传递或引用,而是可变对象和不可变对象之间的区别。
一切基本上都是通过引用传递的,但是如果对象不允许您修改它(它是不可变的),您就不能更改传递引用的原始对象。例如 Python ints
是不可变的,因此即使 int 是通过引用传递的,您也永远无法修改原始对象。如果你想这样做,你必须将对象包装在一个可变对象中,例如一个列表。可以修改列表(追加、弹出等)
所以你 "could" 说 Python 的属性访问 .
类似于 C++ ->
但这是 [=23 的一种奇怪的术语=].
在您的示例中,您传递了一个可变对象(列表)。所以追加会修改原来的对象。因此,您的代码的输出是 [0, 1]
。 (你应该把它包括在你的问题中。)