python 高級編程與異步IO併發編程(七) 對象引用、可變性和垃圾回收

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) #is就是說它們兩是否是同一個對象

b.append(4)
print(a)
複製代碼

7-2 ==和is的區別

#is就是判斷兩個對象是否相同,==是判斷值是否相等
a=[1,2,3,4]
b=[1,2,3,4]
print (a is b)
print(a==b)
#這時a和b是兩個duixiang
class People():
    pass
person = People()
if type(person) is People:
    print ("yes")
     
可是當a=1,b=1時候是相等的,python內部的優化機制
複製代碼

7-3 del語句和垃圾回收

#python中的垃圾回收的算法是採用引用計數,當引用爲0則回收
a=1
b=a
del a
class A:
    def __del__(self):
        pass
#能夠重載__del__魔法函數幫咱們作些事
複製代碼

7-4 一個經典的參數傳遞錯誤

def add(a,b):
    a+=b
    return a
    
class Company:
    def __init__(self,name,staffs=[]):
        seif.name=name
        self.staffs=staffs
        
    def add(seif,staff_name):
        self.staffs.append(staff_name)
    def remove(self,staffs_name):
        self.staffs.remove(staff_name)
        
if __name__ =="__main__":
        com1 = Company("com1",['bobby1','bobby2'])
        com1.add('bobby3')
        com1.remove('bobby1')
        
        com2=Company("com2")
        com2.add("bobby")
        print(com2.staffs)
        
        print(Company.__init__.defaults__)
        
        com3=Company("com3")
        com3.add("bobby5")
        print(com2.staffs)
        print(com3.staffs)
      
        
        print(com1.staffs)
        a=1
        b=2
        c=add(a,b)
        print(c)
        print(a,b)
        
        a=[1,2]
        b=[3,4]
        
        a=(1,2)
        b=(3,4)
        
        print(c)
        print(a,b)
        
複製代碼

7-5 本章小結

對象引用可變性,python變量的本質,is和==的區別,del回收機制,參數傳遞錯誤.java

相關文章
相關標籤/搜索