gj7 对象引用、可变性和垃圾回收
生活随笔
收集整理的這篇文章主要介紹了
gj7 对象引用、可变性和垃圾回收
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
7.1 python變量到底是什么
#python和java中的變量本質不一樣,python的變量實質上是一個指針 int str, 便利貼a = 1 a = "abc" #1. a貼在1上面 #2. 先生成對象 然后貼便利貼a = [1,2,3] b = a print (id(a), id(b)) print (a is b) b.append(4) print (a)--- 1642030876232 1642030876232 True [1, 2, 3, 4]7.2 ==和is的區別
is 判斷是否是同一個對象,id是否相等
a = [1,2,3,4] b = [1,2,3,4]print(a == b) # 判斷值是否相等 print (id(a), id(b)) print (a is b)c=1 d=1 print(c is d) # 將一定范圍的小整數,內存地址進行了復用 ? # --- True 1642030933512 1642030785544 False True---class People:passperson = People() if type(person) is People:print ("yes")type(person)--- yes __main__.People7.3 del語句和垃圾回收
# cpython中垃圾回收的算法是采用 引用計數 # 當計數器減為0 就會被回收 a = object() b = a del a print(b) print(a)class A:def __del__(self): # 當被回收的時候,執行下面的邏輯pass7.4 一個經典的錯誤
為了數據的安全性,使用tuple而不是list類型來存儲
def add(a, b):a += breturn a a = 1 b = 2 c = add(a,b) print(c) print(a,b) # --- 3 1 2 # ---傳遞進來的list受到了影響 a = [1,2] b = [3,4] c = add(a,b) print(c) print(a,b) # --- [1, 2, 3, 4] [1, 2, 3, 4] [3, 4] # --- a = (1,2) b = (3,4) c = add(a,b) print(c) print(a,b) --- (1, 2, 3, 4) (1, 2) (3, 4) --- ? class Company:def __init__(self, name, staffs=[]):self.name = nameself.staffs = staffsdef add(self, staff_name):self.staffs.append(staff_name)def remove(self, staff_name):self.staffs.remove(staff_name)com1 = Company("com1", ["lewen1", "lewen2"]) com1.add("lewen3") com1.remove("lewen1") print("com1.staffs:",com1.staffs)com2 = Company("com2") # 使用了默認的[],list又是可變的對象 com2.add("lewen") print(com2.staffs)print (Company.__init__.__defaults__) # 沒有傳遞參數時,都使用默認的【】值com3 = Company("com3") # 使用了默認的[],list又是可變的對象 com3.add("lewen5") print (com2.staffs) print (com3.staffs) print (com2.staffs is com3.staffs) # --- com1.staffs: ['lewen2', 'lewen3'] ['lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5', 'lewen'] (['lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5', 'lewen'],) ['lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5'] ['lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5', 'lewen', 'lewen5'] True?-
總結
以上是生活随笔為你收集整理的gj7 对象引用、可变性和垃圾回收的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gj6 深入python的set和dic
- 下一篇: gj8 元类编程