美化组的Python内存问题

美化组的Python内存问题,python,memory,beautifulsoup,Python,Memory,Beautifulsoup,我已经解决了这个问题,但我想知道为什么一开始就造成了这个问题。我使用BeautifulSoup从网页中识别此跨度: span = <span id="ctl00_ContentPlaceHolder1_RestInfoReskin_lblRestName">Ally's Sizzlers</span> 但是,在每个循环上,这将占用整整1MB的空间,大约有20000个循环。通过反复试验,我找到了这个解决方案: restaurant.name = str(span.cont

我已经解决了这个问题,但我想知道为什么一开始就造成了这个问题。我使用BeautifulSoup从网页中识别此跨度:

span = <span id="ctl00_ContentPlaceHolder1_RestInfoReskin_lblRestName">Ally's Sizzlers</span>
但是,在每个循环上,这将占用整整1MB的空间,大约有20000个循环。通过反复试验,我找到了这个解决方案:

restaurant.name = str(span.contents)

你能告诉我为什么前一个span.contents会占用这么多内存吗?

可能是因为
str(span.contents)
正在调用对象
span.contents
中的
\u str\u
函数并返回一个较小的表示。您可以使用来测量内存消耗量,但以防万一:
span.contents
返回对
navigablesting
实例的引用。这个实例和DOM树之间有一个链接,因此只要这个实例在使用中,垃圾收集器就不能从内存中释放整个DOM树。因此,只要
restaurant.name
没有从内存中释放,整个DOM树就保存在内存中

使用
str(span.contents)
返回一个未与DOM树链接的字符串,因此它不会阻止从内存中释放DOM树

restaurant.name = str(span.contents)