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

2024-10-03 15:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: the对象内存inidif定义address
1条回答
网友
1楼 · 发布于 2024-10-03 15:27:50

(这应该是一个注释,但有点长。)

请注意,在您的示例中,您似乎依赖于对象是整数,但没有什么依赖于它,整数也不是特殊的-它们只是常规对象。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”,它可能(实际上)会被优化为引用同一个整数对象,因为获得具有相同值的不同整数对象是没有用的。你知道吗

相关问题 更多 >