不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
3.本质是因为不可变对象一旦新建后,系统就会根据他的大小给他分配固定死的内存,所以不允许修改,只修改值只能申请新的内存和地址。而可变对象,他的内存大小可以随着值的变化而自动扩容
在python中通过= 复制的变量,都是同时既把变量的值,也把变量在内存中的地址复制也过去了。即=复制过的变量不仅内存地址一样,变量的值也一样。但是需要注意的是:对于不可变类型(如int)的变量,如果要更改变量的值,则会创建一个新值,并且给这个新值分配一个新的内存地址,然后把变量指向这个新值的内存地址上,而旧值如果没有被引用就等待垃圾回收。如果是可变类型变量。如果修改变量的值,则可以直接修改变量的值,变量的引用地址不会变。
3.变量的分类
可变类型与不可变类型
可变类型,值可以改变:
列表 list
字典 dict
不可变类型,值不可以改变:
数值类型 int, long, bool, float
字符串 str
元组 tuple
给不可变类型的变量赋值会产生新的地址,修改时产生新的地址;给可变类型的变量赋值会产生新的地址,修改时不产生新的地址。
网友评论