내가 그렇게하면 StringIO간에 메모리가 공유됩니까? 나는 파이썬 프로세스의 메모리 라인에 증가하지 않았다 때문입니다 느낌이있다 6. 그러나python : 메모리가 StringIO간에 공유 되었습니까?
In [1]: from StringIO import StringIO
In [2]: s = StringIO()
In [3]: s.write('abcd'*10000000) # memory increases
In [4]: s.tell()
Out[4]: 40000000
In [5]: s.seek(0)
In [6]: a = StringIO(s.read()) # memory DOES NOT increase
In [7]: a.tell()
Out[7]: 0
In [8]: a.read(10)
Out[8]: 'abcdabcdab'
내 문제는 내가 그 두 변수를 삭제하면, 파이썬 프로세스의 메모리 소비가 더 이상 감소하지 않는다는 것입니다 ... 왜 ? 이 코드가 메모리 누수를 생성합니까?
방금 변수 하나를 사용했을 때 변수를 삭제하면 메모리가 해제됩니다.
나는 여기에서 무슨 일이 벌어지고 있는지 더 잘 이해하고 싶다. 감사합니다. .
좋아요. 청크로 개체를 읽으면 새로운 문자열 개체가 생성된다는 것을 이해합니다. 괜찮아. 나는 새로운 StringIO를 만들 때마다 원래의 데이터 문자열이 복제되지 않도록하고 싶다. 원시 데이터를 복제하지 않고 한 명의 작가와 여러 독자를 갖기 위해 노력하고 있습니다. – Michael
@YAmikep : 독자가 문자열을 복제하지 않습니다. –
이 방법은 StringIO에서 작동하지만 cStringIO와는 다른 것으로 보입니다. cStringIO를 사용하면 매번 문자열이 증가하기 때문에 문자열을 메모리에 복제하는 것처럼 보입니다. reader = StringIO(); reader.write (source.getvalue()) 흥미 롭습니다. – Michael