之前学了很多不可变对象,例如数值、字符串等,现在学习了列表这样的可变对象。
可变对象的细节
可变对象指的是对象里的value可变,但是注意,改变对象里的value,也就是list1[索引]=×的操作不同于对整个变量重新赋值为其他列表。
list1 = [1, 2, 3]
print(id(list1))
list1[1] = 21
print(list1)
print(id(list1))
list1 = [1, 21, 3]
print(list1)
print(id(list1))
2535003345288
[1, 21, 3]
2535003345288
[1, 21, 3]
2535003345800
可以看出,同样是结果为[1,21,3]的列表。但是通过修改元素获得的id和之前的一样,而直接重新赋值的id发生了改变。前面的称为改对象,后者称为改变量。
要注意,改对象的时候,如果有其他变量也指向这个对象,例如变量赋值命令,这时改对象的效果也会影响其他变量;但是如果是改变量,那你改这个是不会影响其他变量的。
list1 = [1, 2, 3]
print(id(list1))
list2 = list1
list1[1] = 21
print(list1)
print(list2)
print(id(list1), id(list2))
list2 = [1, 21, 3]
print(list2)
print(id(list1), id(list2))
2075955319176
[1, 21, 3]
[1, 21, 3]
2075955319176 2075955319176
[1, 21, 3]
2075955319176 2075955319688
区分==和is
==是比较对象的值是否相等,而is是比id是不是一样。就拿上述的列表为例,二者值一样但是id不同。
print(list1 == list2)
print(list1 is list2)
True
False