Python编程学习5:python id()函数和内存分配理解 |
您所在的位置:网站首页 › python的函数返回值类型 › Python编程学习5:python id()函数和内存分配理解 |
1. id()函数可返回对象的内存地址 python中会为每个对象分配内存,哪怕他们的值完全相等。id(object)函数是返回对象object在其生命周期内位于内存中的地址,id函数的参数类型是一个对象。如下例子:c, d 和 2.0 地址不同,但值相等。 c = 2.0 d = 2.0 print(id(c),id(d),id(2.0)) print('c == d:',c==d) print('c is d:',c is d)c == d 比较的是c和d的值是否相等,c is d 则比较的是c和d内存(或id)是否一样。 2537439396824 2537439396776 2537439396800 c == d: True c is d: False2. 为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,字符串对象等,python采取重用对象内存的办法. (1)如指向a=2,b=2时,由于2作为简单的int类型且数值小,python不会两次为其分配内存,而是只分配一次,然后将a与b同时指向已分配的对象。 a = 2 b = 2 print(id(a),id(b),id(2)) print('a == b:',a==b) print('a is b:',a is b) 1683941872 1683941872 1683941872 a == b: True a is b: True(2)如对于数值较大的int对象,python会为aa和bb分别申请一块内存,来存储1999839。 aa = 1999839 bb = 1999839 print(id(aa),id(bb),id(1999839)) print('aa == bb:',aa==bb) print('aa is bb:',aa is bb) 2537439576464 2537439576368 2537438627472 aa == bb: True aa is bb: False3. 内存分配理解 x=3这句的执行过程并不是先获取x原来指向的对象的地址,再把内存中的值更改为3,而是新申请一段内存来存储对象3,再让x去指向对象3,所以两次id(x)的值不同。 x=2 print(id(2)) print(id(x)) x=3 print(id(3)) print(id(x)) 1683941872 1683941872 1683941904 1683941904 L=[1,2,3] M=L print(id(L)) print(id(M)) print(id(L[2])) L[0]=2 print(id(L)) print(M) 2537439413000 2537439413000 1683941904 2537439413000 [2, 2, 3]L[0] 和 L[1] 同时指向数值2,所以地址相同 (如果是2.0则地址不同) 参考文献:https://blog.csdn.net/tycoon1988/article/details/38850443 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |