简介理解
大街上,有个人喊王小二,我们知道,王小二只是个名字,对应着前面某个实体人。在家里,这个实体人的妈妈可能叫这个实体人为二二,而在另外一条街上,也有个人叫王小二,对应的是另外一个实体人。
在python中,变量就对应着上面王小二这个名字,内容对象就对应着某个实体人。变量和对象绑定在一块,编程人员就可以使用变量来指代对象
所以,在两种情况下,变量指代的内容发生变化:绑定的对象本身变了;
变量绑定到另外一个对象
python中赋值符合‘=’ 就意味着绑定变量和对象
a = 1 # 变量a 绑定到 1 这个对象
b = a # 变量b 和 变量a 绑定到同一个对象 1 上
a = 1
id(a) # 结果为140725377081744
b = a
id(b) # 结果为140725377081744
情况1
a = 1 # a 绑定到 对象1 上
def abs(arg): # 运行函数时,arg和a绑定到同一个对象1上
arg = 5 # 因为实数时不可变对象,arg绑定到另一个对象5上,此时a还是绑定1
b = abs(a)
print(a) # 显示结果时1
情况二
a = [] # a 绑定到 列表对象[] 上
def abs(arg): # 运行函数时,arg和a绑定到同一个列表对象[]上
arg.append(5)# 因为列表是可变对象,arg绑定的列表对象增加了一个元素5,此时a还是绑定在这个列表对象上
b = abs(a)
print(a) # 显示结果时[5]
可变对象和不可变对象
定义:可变对象:当有需要改变对象内部的值的时候,这个对象的id不发生变化。包括字典(dict), 集合(set), 列表(list)
不可变对象:当有需要改变对象内部的值的时候,这个对象的id会发生变化。包括整数(int), 字符串(string),浮点数(float),元组(tuple)
# 可变对象
a_list = [1, 2, 3]
id(a_list) # 结果为 4522089032
a_list.append(4)
id(a_list) # 结果为 4522089032
# 不可变对象
a = 10000
id(a) # 4521119088
a = 1
id(a) # 4521119312
b = 10000
id(b) # 4521119216 这里的10000和上面的10000地址不一样