2014-07-08 102 views
-1

在Python中的交互模式,當我說,查詢的名稱和對象在Python

>>> mystr = 'abc' 

我們對象string型的當前幀的內容創建現在'abc'

,如果我改變如下所示的mystr結合,

>>> mystr = 'def' 

然後,該名稱mystr將結合一個新的對象與所述內容'def'

我們知道字符串是不可變的對象,因此包含'abc'的對象不受影響。

在我的機器它的工作原理是這樣的:

>>> mystr = 'abc' 
>>> id(mystr) 
30868568 
>>> mystr = 'def' 
>>> id(mystr) 
36585632 
>>> mystr = 'abc' 
>>> id(mystr) 
30868568 

我的問題:

如何Python環境處理含後新的結合「ABC」,對象將它清除?

+4

這是一個實現細節,但是在CPython中,小字符串會被攔截,並且當您的引用消失時,「abc」不會被刪除。 (順便說一句,永遠不要命名變量'str',因爲它會影響內建類型的對象...) – geoffspear

+0

http://stackoverflow.com/questions/10622472/when-does-python-choose-to-intern-a字符串可能會有所幫助。 – geoffspear

+0

你是對的martijn – overexchange

回答

0

字符串是可變的,引用不是。

當您將str指定爲"def"時,另一個字符串​​不會影響。只是str的內容將會改變,並且會引用新的"def"對象。

當你在python,java等語言中操縱字符串時,會產生一個新的字符串對象。

- 對於額外的信息(性能提示),如果您使用字符串進行操作,請使用StringBuilder

+0

OP已經知道字符串在Python中是不可變的,並且只詢問不再引用的不可變字符串會發生什麼。而StringBuilder甚至不是Python的東西;我不知道爲什麼你會提到Java。 -1。 – geoffspear

+0

正如我所說,它沒有從str引用。如果沒有人再引用它,它將通過垃圾收集來銷燬。 – Kowalski