1

来自命令式编程背景,令人惊讶的是赋值运算符“=”使两个变量名指向内存中的同一位置,而不是将内存中的值从一个唯一对象复制到另一个对象。这种模式既出现在本地数据类型(例如列表)中,也出现在使用“class”关键字定义的类中。但是,我确实注意到此规则的一个例外:

a = 2
if id(a) == id(2):
    print "The id function returns the object's address in memory."
a = 3
if id(a) != id(2):
    print "The hardcoded integer '2' does not get its address in memory re-assigned to that of 3"

这两个条件都满足的话。他们必须这样做,否则自然数的构造就会失败。有什么方法可以在我定义的类中利用这种常量性?我希望某些类不像“ln -s”而更像“cp”。

4

1 回答 1

0

(这应该是一个评论,但有点长。)

请注意,您似乎依赖于示例中的整数对象,但没有任何依赖,并且整数并不特殊——它们只是常规对象。 id(x)返回当前存储在 中的任何对象的标识x。因此,如果我们像这样调整您的示例,我们会得到相同的结果:

object2 = []    # or any object, really
object3 = []    # or any *other* object
a = object2
assert id(a) == id(object2)
a = object3
assert id(a) != id(object2)

关于整数的唯一特殊之处在于,如果您在源代码中多次写入“2”,它可能(并且实际上)会被优化为引用同一个整数对象,因为用相同的整数对象获取不同的整数对象永远不会有用。价值。

于 2013-06-30T10:24:33.677 回答