python内存管理变量_Python变量与内存管理

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交流群,进入后下载资料工具安装包等。最后,感谢观看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值