Python变量与内存管理

Python变量与内存管理

 –与C语言中的变量做对比,更好的理解Python的变量。

变量

变量在C语言中 
  全局变量:其存放在内存的静态变量区中。 
  局部变量:代码块中存放在内存的代码区当中,当被调用后存放在内存栈区。

 而Python的变量存储,则是使用类似堆的方式管理内存,由Python内部机制统一分配回收内存。

Python中的变量与变量存储–引用与对象

  Python作为OOP(面向对象)编程,一直信奉着一个信条,就是万物皆对象。 
  所谓对象,它可以看成经过一系列的抽象以后,将具有共性的一类物体进行实例化(具象化)的个体,就如同我们每个人就是人类里面的一个对象。

 class A():
name = ""
def __init__(self):
pass def funa(self):
pass
def funa():
pass if __name__ == "__main__":
Fun = funa
Variable = 1
ClassA = A()
ListA = [1,2,3]
DictA = {'d':1,'e':2}
TupleA = (1,2,3)
Str = "python"
print(type(Fun))
print(type(Variable))
print(type(ClassA))
print(type(ListA))
print(type(DictA))
print(type(TupleA))
print(type(Str))

输出的是:
class ‘function’
class ‘int’
class ‘main.A’
class ‘list’
class ‘dict’
class ‘tuple’
class ‘str’

  很明显,Python中不管是基础数据类型,类,函数,所有的一切都是作为一个类的对象存储在内存,也可以单纯的看做一个值。

  而Python的变量就是作为一个引用,读取对象所存储的信息,与C面向过程所不同,Python变量即对象的引用,通俗来说就是指向值的名称。

Python变量与内存管理

  所以Python的变量只是不过对于一块指定内存的引用,也即对对象的引用,或者称为指向值的名称,相对于全局变量,局部变量的赋值只是引用另一块内存。C语言中一个变量代表一块特定的内存,而Python不像C语言,可以看成数据已经存放在内存之中了,被Python的变量对内存进行引用。即使变量不存在了,内存里值也不会受到任何影响。

 if __name__ == "__main__":

     a = 1
b = 2
print(id(a))
print(id(b)) a = b
print(id(a))
print(id(1))
print(id(2)) sys.exit(0)

输出的是: 
10919424 
10919456 
10919456 
10919424 
10919456 
  从输出结果来看,很明显同一块内存数据其实是可以被多个变量引用,且常量和变量的内存地址是相对应的。

Python变量与内存管理

 def funa():
a = 1
print(id(a)) if __name__ == "__main__": a = 1
funa()
print(id(a))
a = 2
print(id(a))
funa() sys.exit(0)

输出结果是:
39697096
1409448784
39697096
1409448784
1409448784
   当函数被调用完,只要类实例还被引用,那么类实例依然存在类似c++的new,当del对象时,不影响对象还在被外部变量引用的值。
   
  当我们若是del掉classA后,再输入print(id(classA)),会出现如下错误:

 Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/pysidetest/demo.py", line 69, in <module>
print(id(classA))
NameError: name 'classA' is not defined

如果还有问题未能得到解决,搜索887934385交流群,进入后下载资料工具安装包等。最后,感谢观看!

上一篇:javascript中的内存管理


下一篇:【转】javascript变量作用域、匿名函数及闭包