一、选择题
1、关于python内存管理,下列说法错误的是:(D)
A - 变量不必事先声明
B - 可以使用del释放资源
C - 变量无须指定类型
D - 变量无须先创建和赋值而直接使用
python当中的垃圾回收算法是采用引用计数,
当一个对象的引用计数为0时,
python的垃圾回收机制就会将对象回收:
a = "larry"
b = a
larry这个字符串对下你给,在第一行被贴了a标签后,引用计数为1,
之后第二行,又贴上了b标签,
此时,该字符串对象的引用计数为2
a = 'larry'
b = a
del a
注意:在python语言当中,del语句操作某个对象的时候,并不是直接将该对象在内存当中删除,
而是将该对象的引用计数-1。
a = 'larry'
b = a
del a
>>> id(b)
4572141808
>>> id(a)
>>> NameError: name 'a' is not defined
从以上示例当中可以看出,larry这个字符串对象在第一行被贴上了a标签,
此时字符串的引用计数为1,接着第二行又被贴上了b标签,
此时该字符串对象的引用计数为2,
在第三方中,del语言删除了a变量(标签),
在后续的print中可以看出,内存中实际的字符串对象并没有被删除,
del语句只是删除了一个变量对该字符串对象的引用,
所以,对于larry这个字符串对象来说,效果只是引用计数-1。
魔法函数之__del__
类当中的'del'魔法函数,
支持我们自定义清理对象的逻辑,
当python解释器使用del语言删除类的对象的时候,
会自动调用类中的__del__函数,
我们可以对其进行重载。
class Ref:
def __init__(self,name):
self.name = name
def __del__(self):
print('删除对象')
del self.name
r = Ref(name='larry')
print(r.name)
del r
删除对象。我们可以通过重载__del__魔法函数,
自己灵活控制在del对象的时候执行哪些善后操作。
2 - 可以避免类型错误的函数是(C)
A - type()
B - vars()
C - str()
D - chr()
对于 vars()