python 基础学习笔记(四) 引用及垃圾回收

  • 进一步的列表操作
print("abc"+"xyz")
s="abc".__add__("xyz")
print(s)

b=2.0.__mul__(3.0)
print(b)

lis=[1,2,3,4]
print(lis.__getitem__(3))
print(lis[3])

b=lis[:]
a=lis
print(b,"\n",a)

lis.__setitem__(3,0)   #位置三设为0
print(lis)

lis.__delitem__(2)     #删除数字2
print(lis)

字典

dict_exm={"a":1,"b":2,"c":3}
dict_exm.__delitem__("a")
print(dict_exm)
  • 内置函数
print(len([1,2,3]))
print([1,2,3].__len__())

print(abs(-1))
print((-1).__abs__())

print(int(2.3))
print((2.3).__int__())
  • 特性(property)

同一对象的某属性依赖于另外一个属性,即时变化

class chicken(object):
    def __init__(self,age):
        self.age=age
    
    def isAdult(self):
        if self.age>1.0:
            return True
        else:
            return False
    adult=property(isAdult)
    feather=True
    
summer=chicken(18)
summer.feather=False
print(chicken.feather)     #True
print(summer.adult)        #True

chicken.feather=3
print(chicken.feather)     #3

property(获取特性函数,修改特性函数,删除特性函数,特性文档)

class number(object):
    def __init__(self,value):
        self.num=value
    
    def get_neg(self):
        return -self.num
    
    def set_neg(self,value):
        self.num=-value
    
    def del_neg(self):
        print("delete value")
        del self.num
    
    neg=property(get_neg,set_neg,del_neg, "negative")

n=number(2.5)
print(n.num)

n.neg=-22
print(n.num)            #22
print(n.neg)            #-22

print(n.neg.__doc__)    

del n.neg               #delete value
#print(n.num)   报错
  • __getattr__()对属性的操作

只作用于查询不在__dict__( )中的属性

class number(object):
    def __init__(self,value):
        self.num=value
    
    def __getattr__(self,name):
        if name=="pos":
            if self.num>10:
                return True
            else:
                return False
        else:
            raise AttributeError(name)

num=number(11)
print(num.pos)   #true   

num=number(10)
print(num.pos)   #false

__setattr__( self,name,value)和__delattr__(self,name )可作用于任一属性

  • 引用查看

id(变量名)

a=1
print(id(a))
print(id(1))    #两者相等

a="b"
print(id(a))

a=1
b=a
print(id(b))
print(id(a))   #两者相等

a=1
print(id(a))
a=a+2
print(id(a))   #增加,根据操作系统字节数计算

对于列表

list1=[0,1]

list2=list1

list1[0]

print(list2)   #也会改变

  • is 判断两个引用是否指向同一对象
a=1
b=1
print(a is b)  #true

  • 函数的参数传递
def f(x):
    print("x1:",id(x))
    x=100
    print("x2:",id(x))
    
a=1
print(id(a))     #1446800864

f(a)             #x1: 1446800864
                 #x2: 1446804032
print(id(a))     #1446800864
  • 垃圾回收  import gc

当某个对象的引用计数降为0,该对象就会被回收

当分配对象和取消分配对象的次数的差值高于某个阈值的时候,会启动自动回收

import gc
print(gc.get_threshold())

返回(700,10,10)

700:阈值

10:每10次0代(新建的)垃圾回收配合1次1代回收

10:每10次1代,1次2代

可修改:

import gc
gc.set_threshold(700,10,5)

猜你喜欢

转载自blog.csdn.net/scarletteshu/article/details/79669122