我刚接触Python,正在尝试理解可变和不可变对象之间的差异。Python中可变类型之一是列表(list)。比如说 L = [1,2,3],那么 L 指向对象 [1,2,3] 的id。如果 [1,2,3] 的内容被修改了,那么L仍然保持相同的id。换句话说,即使对象的大小和内容已被改变,L 仍然与相同的对象相关联。
对于不可变对象,我的理解是不允许修改对象。因此,如果一个变量被重新分配一个新值,那么该变量将绑定到一个具有不同id的新对象上。我期望字符串的行为方式类似。但是,我试图修改一个字符串,但字符串的id并没有改变。
对于不可变对象,我的理解是不允许修改对象。因此,如果一个变量被重新分配一个新值,那么该变量将绑定到一个具有不同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
string
是一个糟糕的变量名,因为它与string
模块名称冲突。 - jpmc26