Python变量与内存管理
–与C语言中的变量做对比,更好的理解Python的变量。
变量
变量在C语言中
全局变量:其存放在内存的静态变量区中。
局部变量:代码块中存放在内存的代码区当中,当被调用后存放在内存栈区。
1 而Python的变量存储,则是使用类似堆的方式管理内存,由Python内部机制统一分配回收内存。
Python中的变量与变量存储–引用与对象
Python作为OOP(面向对象)编程,一直信奉着一个信条,就是万物皆对象。
所谓对象,它可以看成经过一系列的抽象以后,将具有共性的一类物体进行实例化(具象化)的个体,就如同我们每个人就是人类里面的一个对象。
1 classA():2 name = "123"
3 def __init__(self):4 pass
5
6 deffuna(self):7 pass
8 deffuna():9 pass
10
11 if __name__ == "__main__":12 Fun =funa13 Variable = 1
14 ClassA =A()15 ListA = [1,2,3]16 DictA = {'d':1,'e':2}17 TupleA = (1,2,3)18 Str = "python"
19 print(type(Fun))20 print(type(Variable))21 print(type(ClassA))22 print(type(ListA))23 print(type(DictA))24 print(type(TupleA))25 print(type(Str))
输出的是:
class ‘function’
class ‘int’
class ‘main.A’
class ‘list’
class ‘dict’
class ‘tuple’
class ‘str’
很明显,Python中不管是基础数据类型,类,函数,所有的一切都是作为一个类的对象存储在内存,也可以单纯的看做一个值。
而Python的变量就是作为一个引用,读取对象所存储的信息,与C面向过程所不同,Python变量即对象的引用,通俗来说就是指向值的名称。
所以Python的变量只是不过对于一块指定内存的引用,也即对对象的引用,或者称为指向值的名称,相对于全局变量,局部变量的赋值只是引用另一块内存。C语言中一个变量代表一块特定的内存,而Python不像C语言,可以看成数据已经存放在内存之中了,被Python的变量对内存进行引用。即使变量不存在了,内存里值也不会受到任何影响。
1 if __name__ == "__main__":2
3 a = 1
4 b = 2
5 print(id(a))6 print(id(b))7
8 a =b9 print(id(a))10 print(id(1))11 print(id(2))12
13 sys.exit(0)
输出的是:
10919424
10919456
10919456
10919424
10919456
从输出结果来看,很明显同一块内存数据其实是可以被多个变量引用,且常量和变量的内存地址是相对应的。
1 deffuna():2 a = 1
3 print(id(a))4
5 if __name__ == "__main__":6
7 a = 1
8 funa()9 print(id(a))10 a = 2
11 print(id(a))12 funa()13
14 sys.exit(0)
输出结果是:
39697096
1409448784
39697096
1409448784
1409448784
当函数被调用完,只要类实例还被引用,那么类实例依然存在类似c++的new,当del对象时,不影响对象还在被外部变量引用的值。
当我们若是del掉classA后,再输入print(id(classA)),会出现如下错误:
1 Traceback (most recent call last):2 File "C:/Users/Administrator/PycharmProjects/pysidetest/demo.py", line 69, in
3 print(id(classA))4 NameError: name 'classA' is not defined
如果还有问题未能得到解决,搜索887934385交流群,进入后下载资料工具安装包等。最后,感谢观看!