【发布时间】:2019-05-09 05:44:25
【问题描述】:
我是 Python 新手,并试图了解可变对象和不可变对象之间的区别。 Python 中的可变类型之一是列表。假设 L = [1,2,3],那么 L 有一个指向对象 [1,2,3] 的 id。如果 [1,2,3] 的内容被修改,那么 L 仍然保留相同的 id。换句话说,即使对象的大小和内容已经改变,L 仍然与同一个对象相关联。
对于不可变对象,我的理解是不允许修改对象。因此,如果一个变量被重新分配了一个新值,那么该变量将绑定到一个具有不同 id 的新对象。我希望字符串以类似的方式表现。然而我试图修改一个字符串,但字符串 id 没有改变。
string = "blue"
for i in range(10):
string = string + str(i)
print("string id after {}th iteration: {}".format(i,id(string)))
string id after 0th iteration: 46958272
string id after 1th iteration: 46958272
string id after 2th iteration: 46958272
string id after 3th iteration: 47077400
string id after 4th iteration: 47077400
string id after 5th iteration: 47077400
string id after 6th iteration: 47077400
string id after 7th iteration: 47077400
string id after 8th iteration: 47077400
string id after 9th iteration: 47077400
【问题讨论】:
-
副本并没有回答关于字符串的
ids 的问题... -
如果以空字符串开头;
id保持不变,直到第 6 次迭代... -
@hiroprotagonist 但随后它会发生变化并不断变化。
-
旁白:
string是一个糟糕的变量名称,因为它与string模块名称冲突。
标签: python immutability mutable