在Python中创建具有唯一内存位置的对象

时间:2013-06-30 02:15:17

标签: python object

来自命令式编程背景,令人惊讶的是赋值运算符“=”使两个变量名指向内存中的相同位置,而不是将内存中的值从一个唯一对象复制到另一个。此模式既显示在本机数据类型(如列表)中,也显示使用“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”。

1 个答案:

答案 0 :(得分: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”,它可能(并且实际上)将被优化以引用相同的整数对象,因为它对于获取不同的整数对象永远不会有用具有相同的价值。