python如何清空数组?
高洛峰
高洛峰 2017-04-17 14:57:09
[Python讨论组]

我有一个变量数组,可能要大量重复使用,所以每次都要清空,用arr=[],是不是良策?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(6)
怪我咯

几种操作方式,效率差不多:

In [4]: %timeit l=range(10000);l=[];
10000 loops, best of 3: 115 µs per loop

In [5]: %timeit l=range(10000);del l[:]
10000 loops, best of 3: 107 µs per loop

In [6]: %timeit l=range(10000);l=None;
10000 loops, best of 3: 114 µs per loop

所以从性能上来看,这几种删除方式都可以。

从功能上来讲,有一点区别:
1. l=[]和l=None是给l赋一个新的值,不影响原来数组的内容

In [1]: l=range(5)

In [2]: l2=l

In [3]: l2=None

In [4]: l
Out[4]: [0, 1, 2, 3, 4]

2. del l[:]则是删除了原数组的所有元素

In [5]: l2=l

In [6]: del l2[:]

In [7]: l
Out[7]: []
高洛峰

因为python的所有的变量都是指针所以不需要考虑是否del的问题,每次对arr重新赋值后,之前内存的引用计数器会减1。当引用计数器为0时内存会自动回收。

ringa_lee
 del list[:]

list=[]

list[:]=[]
高洛峰

能贴代码的上下文吗

我一般huge_list = None

黄舟

如果你确实需要用到list,一般是按你这样处理,以前的list对象会被gc自动回收

阿神

我的建议是直接 arr=[] ,如果数量很多的话,这样可以节省一些时间的,因为省去了对对象的操作。

首先我感觉你是带有一种C的思维来思考Python这种动态语言,我虽然不是专业些Python的,但是我曾经较为深入的学习过javascript这门语言。

所以我觉得对于一门动态语言来说,如何将自己的思维从编译语言当中切换过来,是需要好好思考一下的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号