python--关于垃圾回收机制的一些理解
python垃圾回收机制小问题
# python 中关于命名空间和垃圾回收机制 print([] == []) # True print([] is []) # False print(id([]), id([])) # 35156656 35156656 # 因为值相同,所以为True # 解释:python解释器在读到第一个空列表,会开辟一个内存空间给它,再读第二个空列表,会开辟一个新的内存空间,故id不同 # 内存地址相同:python解释器在读到第一个空列表时,会开辟一个内存空间,当读到逗号时,第一个空列表触发垃圾回收机制,因为它的引用计数为零,所以被销毁掉.这时候往后读,读到第二个空列表时,就会将刚刚释放掉的内存地址给第二个空列表,就会显示两个内存地址相同的情况.
通过来及回收机制证明函数默认关键字参数内存开辟时间--在函数定义时,python解释器读到这一个函数的时候就开辟了.
print(id([])) # 49745712 def fun(a, ): pass print(id([])) # 49745712 # 第一个空列表在打印完后因为没有引用,就被垃圾回收机制回收了,第二个空列表开辟内存空间时就近指向了刚刚释放的这个内存,所以两者相同
print(id([])) # 48959280 def fun(a,li=[]): print(id(li)) pass print(id([])) # 48957560 # 第一个空列表在打印完后因为没有引用,就被垃圾回收机制回收了,释放掉的内存空间直接被li指向了.所以第三个print出来的id与第一个就不相同了.
print(id([])) # 48959280 def fun(a, li=[]): print(id(li)) pass fun(1) # 48959280 print(id([])) # 48957560 # 通过打印li的id,再次证明.第一个空列表在打印完后因为没有引用,就被垃圾回收机制回收了,释放掉的内存空间直接被li指向了.所以第三个print出来的id与第一个就不相同了.
posted on 2018-08-20 13:47 None——None 阅读(102) 评论(1) 收藏 举报
浙公网安备 33010602011771号