前几天,某个学习群里有小伙伴问了一个关于id()的问题。事后,猫猫想起Python中一些常用对象的内存地址是共用的,但是具体是哪些却忘了。于是,猫猫意识到这是我知识薄弱之处,有提升空间,便进行了一番学习。
有意进群讨论的,请加我微信,有意进群讨论的,请加我微信,有意进群讨论的,请加我微信, lijinwen1996329
今天,猫猫把学习到的部分内容总结出来,分享给大家。阅读本文,大家可以学到如下内容:
1、对象的Id是什么?
2、内置id()函数是什么?
3、共用Id的内存分配策略?特权种族?
学习群里的一道问题
首先,看看小伙伴贴出的代码:
In [1]: a=[1,2,3]
In [2]: id(a)
Out[2]: 2399283020744
In [3]: id(a.append(4))
Out[3]: 1417427824
In [4]: a.append(4)
In [5]: id(a)
Out[5]: 2399283020744
他的问题是:为何第二个id值(1417427824)不等于其它两个的id值(2399283020744)?还有这个id值(1417427824)到底是谁的id?
现在公布答案:第二个id值(1417427824)是None的id,只要打印id(None)就能看出来;至于为啥是None的id,因为列表的append()方法返回值是None,而id(a.append(4))等价于取这个append操作的返回值的id,也就是说id(a.append(4))等价于是id(None)。