是的,您基本上是正确的。在Python中,可以将变量名视为对值的引用(尽管它的工作原理类似,但不是C ++引用,更多的是声明它引用了某种东西)。
顺便说一句,Python方式与C
非常相似,C
int &b = a
只是意味着a
并b
引用相同的值。
或C int *pb = &a
,其含义a
和*pb
引用的是相同的值,但是带来了所有尚未使C接受大脑弯曲的人们带来的困惑:-)
在Python中为变量名称赋值会使名称引用 不同的 值,它永远不会复制值本身:
a = 7 # Create "7", make "a" refer to it.
b = a # make "b" refer to the "7" as well.
a = 42 # Create "42", make "a" refer to it, b still refers to the "7".
(我说的是“创建”,但不一定如此-如果某个位置已经存在某个值,则可以重复使用它)。
在类似C的语言中,第二条语句b = a
创建一个 新 值,将“ 7”复制到其中,然后命名为b
。在Python中,它仅以a
并b
引用相同的 值结束。
在基础数据是不可变的(无法更改)的地方,通常会使Python看起来与C的行为相同。
但是,对于 可变 数据(与在C中使用指针或在C ++中使用引用相同),人们有时会感到惊讶,因为他们没有意识到背后的价值可能是共享的:
>>> a = [1,2,3] ; print a
[1, 2, 3]
>>> b = a ; print b
[1, 2, 3]
>>> a[1] = 42 ; print a
[1, 42, 3]
>>> print b #WTH?
[1, 42, 3]
b = a[:]
b = [item for item in a]
(这将适用于一个级别,其中b = a
适用于零级别),或者,deepcopy
如果您想在完全 唯一的情况下使用,则可将其用于任何必要级别。