python 高级编程与异步IO并发编程(七) 对象引用、可变性和垃圾回收

297 阅读1分钟

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回收机制,参数传递错误.