1.变量赋值本质
python中变量的赋值并非单纯的将值复制过去一份保存起来,而是将变量值的引用复制过去保存一份。
python中变量赋值过程大致描述:
C或C++中变量赋值过程大致描述:
可以通过id()方法验证,id() 函数用于获取对象的内存地址,示例如下:
1 a=100
2 b=a
3 c=b
4 print(id(a))
5 print(id(b))
6 print(id(c))
2.可变类型&不可变类型
python值靠引用的传递,那么一个变量的值改变了,同样引用的其它变量的值是否会变呢?
1 A = ['1','2','3','4']
2 B = A
3 A.append('5')
4 print(B)
5 a = 100
6 b = a
7 a = 200
8 print(b)
我们可以看到列表的变量的值随其它同引用变量对值的修改而发生了变化,但数值类型的变量却没有发生变化,这是因为python中类型分为可变类型与不可变类型。
可变类型,值可以改变:
列表(list)、字典(dict)
不可变类型,值不可以改变:
数值类型(int、long、bool、float)、字符串(str)、元组(tuple)
注意:本质上不可变量类型在原值发生变化时,重新开辟空间生成了一个值的存储区域并引用了新的地址,验证示例:
1 a = 100
2 b = a
3 print(id(a))
4 print(id(b))
5 a = 200
6 print('--修改值后--')
7 print(id(a))
8 print(id(b))