理解Python中内存机制与原理是学习Python关键的一环。我们通过Python内置函数 id() 来一步步进行说明。
1、不可变数据类型
我们先写了一串极其简单的代码:
a=3
好了,我们有了一个变量名a,这里让它来代表数字3。我们突然又想把a的值进行+1,好的,那我们可以这样做
a += 1
这两条代码扔给谁都可以无压力的理解。嗯,我们下面再做两件事情,Python为我们提供了id()的内置函数,可以用来显示当前a的地址,我们来试试看:
a = 3
print(id(a))
a += 1
print(id(a))
显示结果如何呢:
140723136032576
140723136032608
Process finished with exit code 0
观察结果,可以看到:我们得到了两个不同的地址。我们再做一些修改:
a = 3
c = a
print(id(a))
print(id(c))
a += 1
print(id(a))
结果:
140723133869888
140723133869888
140723133869920
我们进行一些总结:这里我们的变量都是整型,并且分别打印两次 id(a) ,发现两次a的地址并不相同,这就是Python的不可变数据类型。
Python中的不可变数据类型有int、string等等,这些类型在给变量进行第一次赋值操作时,并不是把当前a所表示的地址变为上图的数字3 ,而是让a存放3所在的内存地址。
不可变的意思就是说:我们在给a继续赋值时,不能改变a对应内存值的位置,而是将一个存放新数字的内存地址让a来表示,当使a自己增大时也会开辟新的内存来存放。
2、可变数据类型
我们学习了上面不可变数据类型的概念,来理解可变数据类型的概念时就很好理解了。
Python中的可变数据类型有列表和字典,对其中某个元素进行修改、(或)进行添加元素时,此时地址并不会发生变化。例:
ls = [1, 2, 3, 4]
print(id(ls))
ls[0] = 9
ls += [5]
print(ls)
print(id(ls))
结果:
2333278298632
[9, 2, 3, 4, 5]
2333278298632