2011-06-30 23 views
1

我有幾個Python腳本運行並行這個簡單的代碼:python uniq id函數嗎?

test_id = id('test') 

test_id獨特或不?

+2

爲了真正回答問題,我們需要知道你實際計劃用'test_id'做什麼。而且,通過獨特的方式,你是否認爲與'=='相等的輸入是唯一的,或者在不同時間創建的這些對象是否具有不同的'test_id'?那麼跨調用或進程呢? – detly

回答

2

http://docs.python.org/library/functions.html#id

返回的對象的「身份」。這是一個整數(或長整數),在整個生命週期中保證這個對象是唯一的並且是常量。具有非重疊生命週期的兩個對象可能具有相同的id()值。
CPython實現細節:這是對象的地址。

所以是的,這些ID是唯一的。

然而,因爲Python中的字符串是不可改變的,id('test')可能是所有字符串相同的,因爲'test' is 'test'很可能是True

+0

如果OP並行運行多個Python實例,那麼它並不保證是唯一的。 –

+0

正確,但使用線程時,我想它是。 – ThiefMaster

0

在CPython中,id是指向內存中對象的指針。

>>> a = [1,2,3] 
>>> b = a 
>>> id(a) == id(b) 
True 

所以,如果你有相同的對象多個引用(和一些角落情況下,小弦創建只有一次,也數比257更小),它不會是唯一的

1

你這是什麼意味着獨特?什麼是獨特的?

它只是內存部分的標識符,由參數的值使用。對於具有相同的值不變的對象往往是相同的:

>>> id('foo') == id('fo' + 'o') 
True 
0

,如果你談論你試圖做這可能會幫助 - 它是不是真的典型使用的ID()內置什麼,至少所有的字符串,除非你真的知道你在做什麼。

Python docs nicely describe the id() builtin function:

這是一個整數(或長整數) 這是保證其 壽命期間可用於此目的的獨特和 恆定。非重疊生命期的兩個對象可能具有相同的id()值。

當我讀到這個時,id()的返回值實際上只能保證在一個解釋器實例中是唯一的 - 即使這樣,只有當這些項的生存期重疊時。保存這些ID以供以後使用,通過套接字等發送它們似乎沒有用處。再次,我不認爲這是真正的人誰不知道他們需要它。

如果您想要生成在多個程序實例中唯一的ID,您可以查看uuid module

它也發生,我認爲你可能試圖produce hashes from Python objects.

也許有一些方法你的問題,這將是比試圖使用id()函數,也許問題需要重新制定清潔。