python清除列表占用内存_python关于列表生成式的内存占用问题

今天爬虫遇到个很奇怪的问题,整个测试大致是这样的:

采用scrapy shell测试:

scrapy shell -s USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36" "https://book.douban.com/tag/"

# 代码一

from pyquery import PyQuery as pq

doc = pq(response.text)

aa = []

bb = []

for i in na:

for item in doc(f'a[name="{i}"][class="tag-title-wrapper"]').items():

# 测试一的写法,直接用aa得到生成式的结果,结果有缺失

aa = [x.attr("href") for x in item.siblings(".tagCol").find("a").items()]

#测试二的写法,用一个外面的列表得到结果,bb能得到想要的结果,但也存在疑问

[bb.append(x.attr("href")) for x in item.siblings(".tagCol").find('a'.items())]

当爬取数据条目时,测试一的结果压根不是想要的结果,但是测试二的结果却是准确的结果。但同时测试二的结果在内存上让我不禁有些疑问:这样产生的结果虽然让bb接收到了,但是整个列表生成式本身也会产生一个结果,而致占用较大内存。因此我用了一个较简单的方法进行测试,如下:

# 代码二:

>>>a,b = [1,2,3],[4,5,6]

>>>x,y = [],[]

>>>x1 = [x.append(j) for i in zip(a,b) for j in i]

>>>x1

[None, None, None, None, None, None]

>>>x

[1, 4, 2, 5, 3, 6] # 是想要的结果

>>>y = [j for i in zip(a,b) for j in i]

>>>y

[1, 4, 2, 5, 3, 6] # 是想要的结果

分析和问题:

产生差别的原因,个人认为是因为append()方法没有返回值,所以遍历时每次都为None。但不理解的是:列表生成式生成的列表是否会占用内存?有什么更简单的方法(不通过append()方法)拿到列表生成式的结果吗?

希望问题已经表述清楚,谢谢大佬们的解惑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值