知行编程网知行编程网  2022-11-12 15:00 知行编程网 隐藏边栏  8 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于内存占用如何python3中的代码解决?的相关知识,包括代码编程,以及python 内存管理这些编程知识,希望对大家有参考作用。

python3中的代码是如何解决内存占用的?


我们都知道,如果内存过多,计算机会运行得更慢。在释放内存之前,首先要查看具体的内存占用量,而不是一味追求内存优化。只有找到占用的内存量,最好根据情况对应不同的内存释放方式。接下来,我们分析检测内容占用的情况,进而进一步提出解决问题的代码。


内存占用检测


下面的代码块可以检查变量 variable 所占用的内存。

import sys 
 
variable = 30 
print(sys.getsizeof(variable)) # 24

Python 是一个解释器,我们可以随时扩展我们的类,例如,通过添加一个新字段:

d1 = DataItem("Alex", 42, "-")
print ("get_size(d1):", get_size(d1))
d1.weight = 66
print ("get_size(d1):", get_size(d1))

很好,但是如果我们不需要这个功能怎么办?我们可以强制解释器使用 __slots__ 命令指定类的列表对象:

class DataItem(object):
   __slots__ = ['name', 'age', 'address']
   def __init__(self, name, age, address):
       self.name = name
       self.age = age
       self.address = address

可以在文档 (RTFM) 中找到更多信息,其中显示“__dict__ 和 __weakref__”。使用 __dict__ 节省的空间是巨大的”。

我们确认:是的,这很重要,get_size(d1) 返回...64 字节,而不是 460 字节,减少了 7 倍。此外,对象的创建速度提高了 20%(参见本文的第一个屏幕截图)。


这并不是因为其他开销真正使用了如此大的内存增益。通过简单的添加元素创建一个 100,000 的数组,并查看内存消耗:

<p><span>data = []<br/>for p in range(100000):<br/>   data.append(DataItem("Alex", 42, "middle of nowhere"))<br/>snapshot = tracemalloc.take_snapshot()<br/>top_stats = snapshot.statistics('lineno')<br/>total = sum(stat.size for stat in top_stats)<br/>print("Total allocated size: %.1f MB" % (total / (1024*1024)))<br/></span></p>

我们不使用 __slots__,它占用 16.8MB 内存,使用时占用 6.9MB。这个操作当然不是最好的,但它确实有最少的代码更改。 (当然不是 7 次,但一点也不差,考虑到代码更改很小。)


以上就是我们解决内存占用的代码方法了,关键还是要先从内存具体占用的情况开始分析,然后再进行下一步的代码操作。

更多Python学习指路:




本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享