Python高级编程和异步IO并发编程---学习笔记--- 第六章---第7章 对象引用、可变性和垃圾回收

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)

a = [1,2,3,4]
b = [1,2,3,4]

class People:
    pass

person = People()
if type(person) is People:
    print ("yes")
# print(a == b)
# print (id(a), id(b))
# print (a is b)

7-2 ==和is的区别

is 判断id  ,==判断值

a=b,这样其实是同一个对象,分别对a,b赋值,则a,b是不同对象。不过对某些小数据,即使赋值,他们也可以为同一ID

比如a=1,b=1

代码见上节

7-3 del语句和垃圾回收

cpython中垃圾回收的算法是采用 引用计数

#cpython中垃圾回收的算法是采用 引用计数
a = object()
b = a
del a
print(b)
print(a)
class A:
    def __del__(self):
        pass

7-4 一个经典的参数错误

如果函数传递进去的参数是list,那么内部是可能被修改的(如果需要传递list作为参数,那么实例化时尽量不要使用默认的,不然如果还有一个实例被实例化时也使用了这个这个默认的参数,那么两个实例就可能互相影响)

def add(a, b):
    a += b
    return a
# a = 1
# b = 2

# a = (1, 2)
# b = (3, 4)

#列表会受到局部影响
# a = [1,2]
# b = [3,4]

# c = add(a, b)
# print(a, b)
# print(c)
class Company:
    def __init__(self, name, staffs=[]):
        self.name = name
        self.staffs = staffs
    def add(self, staff_name):
        self.staffs.append(staff_name)
    def remove(self, staff_name):
        self.staffs.remove(staff_name)

if __name__ == "__main__":
    com1 = Company("com1", ["bobby1", "bobby2"])
    com1.add("bobby3")
    com1.remove("bobby1")
    print (com1.staffs)
    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(com2.staffs is com3.staffs)
#com2和com3实例化时都使用了默认的参数,所以会互相改变
# com1实例化时,传递进了自己的参数,所以没受到影响

目录

7-1 python中的变量是什么

7-2 ==和is的区别

7-3 del语句和垃圾回收

7-4 一个经典的参数错误

7-5 本章小结


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值