可能重複:
Python 「is」 operator behaves unexpectedly with integersPython的身份:多重人格障礙,需要代碼縮水
我偶然發現了以下Python weirdity:
>>> two = 2
>>> ii = 2
>>> id(two) == id(ii)
True
>>> [id(i) for i in [42,42,42,42]]
[10084276, 10084276, 10084276, 10084276]
>>> help(id)
Help on built-in function id in module __builtin__:
id(...)
id(object) -> integer
Return the identity of an object. This is guaranteed to be unique among
simultaneously existing objects. (Hint: it's the object's memory address.)
- 是每numbe一個獨特的對象?
- 不同的變量是否保持相同的元素值(例如,兩個,ii)是同一個對象?
- Python是如何生成一個數字的ID?
- 在上面的例子中,有兩個指針指向一個存儲單元,其值爲2?這將是非常奇怪的。
幫我解開身份危機。
一些更weirdities:
>>> a,b=id(0),id(1)
>>> for i in range(2,1000):
a,b=b,id(i)
if abs(a-b) != 12:
print('%i:%i -> %i' % (i,a,b))
上面的代碼檢查,如果連續整數ID也連續,並打印出 異常:
77:10083868 -> 10085840
159:10084868 -> 10086840
241:10085868 -> 10087840
257:10087660 -> 11689620
258:11689620 -> 11689512
259:11689512 -> 11689692
260:11689692 -> 11689548
261:11689548 -> 11689644
262:11689644 -> 11689572
263:11689572 -> 11689536
264:11689536 -> 11689560
265:11689560 -> 11689596
266:11689596 -> 11689656
267:11689656 -> 11689608
268:11689608 -> 11689500
331:11688756 -> 13807288
413:13806316 -> 13814224
495:13813252 -> 13815224
577:13814252 -> 13816224
659:13815252 -> 13817224
741:13816252 -> 13818224
823:13817252 -> 13819224
905:13818252 -> 13820224
987:13819252 -> 13821224
注意,模式從413開始出現。也許這是由於每個新內存頁面開始時的一些巫術記帳。
這有什麼關係?你問來幹什麼?這會導致什麼問題?我不明白這個問題。請澄清什麼是壞的。 – 2010-01-13 17:48:28
@美國洛特他試圖加深他的理解,有什麼不好呢?有時候旅程比目的地更值錢。 – Simon 2010-01-13 17:54:12
我不明白的問題。如果問題不透明,我無法幫助加深理解。 – 2010-01-13 17:59:09