Python变量与内存管理
Python变量与内存管理
–与C语言中的变量做对比,更好的理解Python的变量。
变量
变量在C语言中
全局变量:其存放在内存的静态变量区中。
局部变量:代码块中存放在内存的代码区当中,当被调用后存放在内存栈区。
1 而Python的变量存储,则是使用类似堆的方式管理内存,由Python内部机制统一分配回收内存。
Python中的变量与变量存储–引用与对象
Python作为OOP(面向对象)编程,一直信奉着一个信条,就是万物皆对象。
所谓对象,它可以看成经过一系列的抽象以后,将具有共性的一类物体进行实例化(具象化)的个体,就如同我们每个人就是人类里面的一个对象。
1 class A(): 2 name = "123" 3 def __init__(self): 4 pass 5 6 def funa(self): 7 pass 8 def funa(): 9 pass 10 11 if __name__ == "__main__": 12 Fun = funa 13 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 = b 9 print(id(a)) 10 print(id(1)) 11 print(id(2)) 12 13 sys.exit(0)
输出的是:
10919424
10919456
10919456
10919424
10919456
从输出结果来看,很明显同一块内存数据其实是可以被多个变量引用,且常量和变量的内存地址是相对应的。
1 def funa(): 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 <module> 3 print(id(classA)) 4 NameError: name 'classA' is not defined
如果还有问题未能得到解决,搜索887934385交流群,进入后下载资料工具安装包等。最后,感谢观看!