1、不可变类型
整型,字符串,浮点型,元组
a = (1,2)
# 这句意思是a --> (1,2),a和(1,2)为同样地址。
a[1] = 3
# 尝试把a指向的(1,2)中的2修改为3,不可行,报错
b = a
# b的地址也为(1,2)的地址
a = (1,3)
#这句意思是a重新指向了内存中的(1,3),可行,a与(1,3)地址相同。
print(id(a),id(b),id((1,3)),id((1,2)))
# 打印结果是id(a)跟id((1,3))相等,而id(b)跟id((1,2))相等
2、可变类型
列表,字典,集合
a = [1,2]
print(id(a),id([1,2]))
# id(a)和id([1,2])不同
b = a
print(id(a),id(b),id([1,2]))
# 结果是id(a)和id(b)相等,与id([1,2])不等。
a = [1,3]
print(b)
# 结果是b = [1,2]
b[1] = 3
print(b)
# 结果是b = [1,3]
总结:
1、变量名 = 不可变类型 例: a = (1,2)
那么该变量名和该值是同一个地址,
变量之间赋值传递的是该值的地址,该值在内存中不允许修改。
对变量重新赋值的话是该变量名就是另一个地址了(但始终变量地址和值的地址相等)。
2、变量名 = 可变类型 例: a = [1,2]
那么变量名本身也会有个地址,指向了该值(变量和值的地址不同)。
变量之间赋值传递的是该变量的地址,该值可进行修改。
对变量重新赋值的话,变量的地址也会改变(但变量地址和值的地址始终不同)。