2017-06-12 78 views
-1

在下面的程序中,正如我們所知道的,在Python中,String是不可變的,如果我們將值重新賦值給python中的字符串,則會創建新的變量(引用)。用於循環迭代的字符串變量

S = "Nagu" 
print (id (S)) 

S = "Santh" 
print (id (S)) 

輸出:

43578232 
43578288 

在正在進行的列表名稱的下面程序遍歷,

names = ["nagu","santh"] 

for name in names: 
    name = "K." + name 
    print("{0} : {1}".format(id(name),name)) 

輸出:

43579688 : K.nagu 
43579688 : K.santh 

中的名稱變量循環獲得不同的價值e從列表中不更改id如何可能?

+0

什麼是問題?我沒看到它。請提供您的願望解決方案 – Gahan

+0

@Gahan,問題是「for循環中的'name'變量從列表*中獲得了不同的值*而不更改id *」以及它如何可能? – zhenguoli

+0

坦白地說,我不明白爲什麼它應該爲您提供相同的ID,想到其他語言中的列表爲第一個字符串「分配」一個節點,並且爲第二個字符串分配一個節點,沒有理由使用相同的ID無論如何 – LiorA

回答

0
names = ["nagu","santh"] 

for name in names: 
    print("before assignment -- {0} : {1}".format(id(name),name)) # you will get different ids before assignment 
    name = "K." + name # you are now assigning value to variable name for temporary which has lifespan of a single loop 
    print("{0} : {1}".format(id(name),name)) 

結果:

before assignment -- 2856389816760 : nagu 
2856391256640 : K.nagu 
before assignment -- 2856391254624 : santh 
2856391256640 : K.santh 

在一個正常的流程,當你重新分配一個值,其ID仍然存在。 但是在'for'循環中,當迭代列表項時,當循環完成一個循環時,先前對id的引用將被釋放(在下一個循環開始時,內存將被釋放)。

+0

謝謝糾正語法。 – Gahan

+0

感謝Gahan的回答 –