python1226.png
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虛擬機才會刪除這個對象。