了解python的名称绑定

了解python的名称绑定,第1张

了解python的名称绑定

是的,您基本上是正确的。在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
如果您想在
完全 唯一的情况下使用,则可将其用于任何必要级别。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5631084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存