在您看来,您遇到的最令人惊讶,奇怪,奇怪或真正的"WTF"语言功能是什么?
每个答案只能有一个功能.
在Python中,函数id()返回对象的内存地址。( https://docs.python.org/2/library/functions.html#id )\xe2\x80\xa8\xe2\x80\xa8 在 python 中,如果两个变量具有相同的值,那么它们是否具有相同的地址?\xe2\x80\xa8\xe2\x80\xa8
\n\nIn [30]: a = \'asdf\'\n\nIn [31]: hex(id(a))\nOut[31]: \'0x1082caa08\'\n\nIn [32]: b = \'asdf\'\n\nIn [33]: hex(id(b))\nOut[33]: \'0x1082caa08\'\n\nIn [34]: c = 2\n\nIn [35]: hex(id(c))\nOut[35]: \'0x1067295c0\'\n\nIn [36]: d = 2\n\nIn [37]: hex(id(d))\nOut[37]: \'0x1067295c0\' \nRun Code Online (Sandbox Code Playgroud)\n 我可以理解以下定义:
每个对象都有一个标识,一个类型和一个值。一旦创建了对象,其身份就不会改变。您可能会认为它是对象在内存中的地址。所述
is操作者比较两个对象的身份; 该id()函数返回一个表示其身份的整数。
我认为上面的定义在创建“某物”时起作用,例如:
>>> a = 0
>>> id(a)
1720438480
Run Code Online (Sandbox Code Playgroud)
但是我不理解:
>>> id(1)
1720438512
>>> b = 1
>>> id(b)
1720438512
Run Code Online (Sandbox Code Playgroud)
我还没有创建任何东西。那么整数“ 1”如何具有ID?这是否意味着只要我在Python Shell中“提及” 1,便立即将其分配给内存地址?另外,这是否意味着因为ID在其生命周期内从未发生变化,并且由于我的计算机内存有限,所以如果我反复询问唯一事物的id(),我最终会得到类似“内存不足”的消息吗?(它不能重新分配内存,因为其他对象的生命期尚未结束。)
或者,从相反的方向显示我的耳朵:
>>> id(something_1)
some unique memory address
>>> id(something_2)
some unique memory address
>>> ...
Run Code Online (Sandbox Code Playgroud)
在什么时候重新分配内存?那就是在那个时候
>>> my_variable = something_1
>>> id(my_variable)
Run Code Online (Sandbox Code Playgroud)
会给出一个与id(something_1)?不同的ID ?
如果我没记错的话a is b应该返回Trueifa和b指向同一个对象。对于两个相等的列表,它会返回False,因为这两个列表是两个不同的列表。我认为不可变对象没有这个问题,但是当我输入时:
a = (1, 2, 3)
b = (1, 2, 3)
a is b #returns false
Run Code Online (Sandbox Code Playgroud)
我认为这应该返回True并a指向b具有相同值的不可变对象。为什么我使用元组时没有a指向同一个对象b?