是的,您基本上是正确的。在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如果您想在
完全 唯一的情况下使用,则可将其用于任何必要级别。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)