澄清python名称空间,特别是列表和整数之间

时间:2013-08-22 07:44:49

标签: python namespaces

我在C方面有一些经验,并且在理解Python处理名称(标识符)的方式方面遇到了一些麻烦。根据我的理解,声明列表x = [1, 2]然后声明一个新标签y = x,我似乎实际上将x作为指针,而y也是一个指针,保持与x相同的地址。但是在Python中我们称之为标签(这些是不同的概念?)。

同样的系统发生在:x = 5y = xx现在是整数的标签,5y也是5的标签。但是现在当我更改x时,结果y将不会改变。所以在后一种情况下,我不认为xy是这个意义上的指针。堆栈上是xy而不是堆?如果是这样,我怎么知道他们是哪一个?在这种情况下应用堆栈和堆的知识是否无用,甚至可能是有害的?我对这部分语言感到很困惑,谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

Python没有“指针”,它没有“变量”,也没有“赋值”。相反,绑定对象引用名称;但我们仍然会调用=语句“赋值”执行的操作来简化操作。

执行y = x时,将名称y绑定到x中包含的引用(反之亦然;区别并不重要)。处理方式的不同取决于对其进行的进一步操作。

x = []          # A new list object is bound to x
y = x           # The reference bound to x is bound to y as well
x.append(None)  # None is *appended* to the list object bound to `x`
print y         # y is bound to the same list
x = 5           # x is *rebound* to a different object
print y         # y remains bound to the list