是否可以使 x 的值等于 id(x)?

Is it possible to make value of x equal to id(x)?

我只是想知道是否可以让一个变量的 id 等于它的值。
我试过暴力破解,但没有成功。 我尝试了什么:

x=0
x=id(x)
while x != id(x):
    x = id(x)

又一次失败的尝试:

x=0
x=id(x)
while x != id(x):
    x = id(x) + x.bit_length()

在给新变量赋值时,编译器是如何为它选择id的?模式是什么?

我觉得理论上是可以的。 id()函数中Pythonreturns变量的内存地址。我认为我们可以做一个特定的地址(例如0x18dd93a5a50),并填充除特定地址外的所有可用内存Python。也就是说,我们让0x18dd93a5a50可用,其他都用上,然后我们把0x18dd93a5a50赋值给x。实际上我们应该分配 32 位来存储整数。但是实现起来比较困难,因为Python不能给指定的内存地址赋值,我们应该用C或者C++来实现(比如代码*(long long*) 0x12345678 = 114514把114514赋值给内存中的地址0x12345678 (实际上代码不能 运行 因为它 运行 在 RING3 中,但 0x12345678 在 RING0 中,即 OS 内核)。

并回答问题:“给新变量赋值时,编译器是如何为它选择id的?模式是什么?”:编译器(严格来说是CPython)不选择id(内存地址)并且里面有没有模式,OS会选择它的id。

我找到了一个有一些意外结果的解决方案。 此代码立即执行(第一个代码在我的 phone 的解释器上工作,但在我的电脑上不工作):

x=0
while x!=id(x):
    x=id(x)-32 # i assume int is 32 bits by default

它在循环的第三个 运行 找到答案。 它不起作用你可以试试这个:

from random import randint
x=0
while x!=id(x):
    x=id(x)+randint(-1000,1000)

所以在 运行ning 这段代码之后,x==id(x) returns True.
但奇怪的是,x is id(x)id(x) == id(id(x)) returns False。 这是我尝试的结果:

x == id(x) #True
x == id(id(x)) #False
id(x) == id(id(x)) #False
id(id(x)) == id(id(id(x))) #False
id(id(x)) == id(id(id(id(x)))) #True

我不明白 x == id(x) 但是他们的 id 不一样!

此代码也有效,但我不知道它是否算作有效解决方案:

def id(x):
    return x
x=0
x==id(x) #True