【发布时间】:2012-03-31 21:57:33
【问题描述】:
一些代码:
import cStringIO
def f():
buffer = cStringIO.StringIO()
buffer.write('something')
return buffer.getvalue()
StringIO.close():释放内存缓冲区。尝试进一步做 使用关闭的 StringIO 对象的操作将引发 ValueError。
我必须做buffer.close(),否则它会在缓冲区超出范围并被垃圾收集时自动发生?
更新:
我做了一个测试:
import StringIO, weakref
def handler(ref):
print 'Buffer died!'
def f():
buffer = StringIO.StringIO()
ref = weakref.ref(buffer, handler)
buffer.write('something')
return buffer.getvalue()
print 'before f()'
f()
print 'after f()'
结果:
vic@wic:~/projects$ python test.py
before f()
Buffer died!
after f()
vic@wic:~/projects$
【问题讨论】:
-
为什么不打印 f() 而不是直接打印 f()?