2017-06-12 77 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的回答 –