0

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

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

4

1 回答 1

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
于 2013-08-22T07:58:07.750 回答