我有一个包含列表的Python类,我append()重视它.
如果我删除此类的对象然后在同一脚本中创建第二个对象,则第二个对象的列表与删除时的第一个对象的列表相同.
例如:
class myObj:
a = []
b = False
o = myObj()
o.a.append("I'm still here!")
o.b = True
del o
import gc
gc.collect() # just to be safe
o = myObj()
print(o.a) # ["I'm still here!"]
print(o.b) # False
Run Code Online (Sandbox Code Playgroud)
有是一种方法来清空列表:
while len(o.a):
o.a.pop()
Run Code Online (Sandbox Code Playgroud)
但那太荒谬了,更不用说慢了.为什么它在垃圾收集后仍然在内存中,更重要的是为什么它不会在类进入时被覆盖?正确处理所有非列表成员变量.append(),extend()并且insert()都导致相同的结果 - 我应该使用另一种方法吗?
这是我的完整测试脚本.请注意,如果我尝试直接删除成员列表,Python会给出一个AttributeError,即使我可以从中读取它.
在类声明中创建变量时,它是类属性,而不是实例属性.要创建实例属性,您必须self.a在方法内部执行,例如__init__.
将其更改为:
class myObj:
def __init__(self):
self.a = []
self.b = False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
464 次 |
| 最近记录: |