Python中的变量与垃圾回收机制
Python与Java的变量本质上不一样,Python的变量本事是个指针。当Python解释器执行number=1的时候,实际上先在内存中创建一个int对象,然后将number指向这个int对象的内存地址,也就是将number“贴”在int对象上,测试用例如下:
1 number = [1, 2, 3] 2 demo = number 3 demo.append(4) 4 print(number) 5 # [1, 2, 3, 4]
==和is的区别就是前者判断的值是否相等,后者判断的是对象id值是否相等。
1 class Person(object): 2 pass 3 4 p_0 = Person() 5 6 p_1 = Person() 7 8 print(p_0 is p_1) # False 9 print(p_0 == p_1) # False 10 print(id(p_0)) # 2972754016464 11 print(id(p_1)) # 2972754016408 12 13 li_a = [1, 2, 3, 4] 14 li_b = [1, 2, 3, 4] 15 16 print(li_a is li_b) # False 17 print(li_a == li_b) # True 18 print(id(li_a)) # 2972770077064 19 print(id(li_b)) # 2972769996680 20 21 a = 1 22 b = 1 23 24 print(a is b) # True 25 print(a == b) # True 26 print(id(a)) # 1842179136 27 print(id(b)) # 1842179136
Python有一个优化机制叫intern,像这种经常使用的小整数、小字符串,在运行时就会创建,并且全局唯一。
Python中的del语句并不等同于C++中的delete,Python中的del是将这个对象的指向删除,当这个对象没有任何指向的时候,Python虚拟机才会删除这个对象。