Python的可变类型与不可变类型,在这里举例子吧。
1.a = 3
b = 3
c = [1, 2, 3]
d = [1, 2, 3]
print(a, b)
print(c, d)
print(a is b)
print(c is d)
2.a = 3
b = a
print(a, b)
print(a is b)
b = 5
print(a, b)
print(a is b)
c = [1, 2, 3]
d = c
print(c, d)
print(c is d)
d = [1, 2, 3, 4]
print(c, d)
print(c is d)
3.a = 3
print(a)
print(id(a))
a += 2
print(a)
print(id(a))
c = [1, 2, 3]
print(c)
print(id(c))
c += [4]
print(c)
print(id(c))
因为在 python 里整型 是不可变类型,而列表是可变类型,所以接下来我直接以例子中的两个不同类型对象来分别代表可变类型与不可变类型。
1,对于不可变类型,值相同,地址也相同;对于可变类型, 值相同,地址不一定相同。
2,对于不可变类型,值不同,地址不同;对于可变类型,值不同,地址不同。
3,对于不可变类型,值变化,地址变化;对于可变类型,值变化,地址不变。
(注意:这里 “不同” 是 “不同”, “变化” 是 “变化”)
所以,对于不可变类型来说,不管是赋不同的值也好,还是在原值的基础上做些修改也好,变量的内存地址都会改变; 而对与可变类型来说,如果是在原值上进行修改而不是重新赋值的话,内存地址是不发生改变的。
要理解 重新赋值 和 在原值上进行修改 这两种方式,虽然都属于值的变化,可对于不同的类型来说,是不一样的。
|