python 链表操作 优化_链表的内存优化

我最近制作了一个脚本来生成随机迷宫,它使用一个自定义的迷宫类,由几个迷宫节点构建而成。每个节点如下所示:class mazeNode:

def __init__(self, pos, conn = None):

self.pos = pos

if conn:

self.conns = [conn]

else:

self.conns = []

conn是另一个mazeNode对象,self.conns在创建迷宫的过程中被更改,以包括节点连接到的每个mazeNode对象。pos是一个具有节点位置的元组。创建迷宫时,会创建mazeNode对象,并根据深度优先搜索算法以分支方式链接在一起。在

这个脚本运行得很好,可以在10秒内创建一个500*500大小的迷宫。然而,它似乎不是很有效的记忆。我已经成功地创建了一个大小为6000*6000的迷宫,但是当我尝试10000*10000时,无论我做什么,我都会得到一个内存错误,即使我分配了50GB的虚拟RAM。对于这个大小,我得到了10^8个mazeNode对象。在

我试着使用shelve模块,但是这太慢了,以至于无法使用,对于更大的迷宫,我得到了一个递归深度错误(可能是因为不必要的递归,脚本很慢)。在

我想知道是否有任何方法可以在保持速度的同时优化脚本的内存使用。所有的节点都链接在一起,但它们不一定都在RAM中。在

编辑

迷宫类如下:

^{pr2}$

编辑2:

我使用了插槽:并编辑了mazeNode类,如下所示:class mazeNode:

__slots__ = ('posx', 'posy', 'conns', )

def __init__(self, pos, conn = None):

self.posx = pos[0]

self.posy = pos[1]

self.conns = [conn] if conn else []

并使用sys.getsizeof()获取类实例的大小。在print(sys.getsizeof(self.maze), sys.getsizeof(self.maze.posx), sys.getsizeof(self.maze.posy), sys.getsizeof(self.maze.conns))

打印64 28 28 96。但是,如果我去掉__slots__,我得到56 28 28 96,这看起来很奇怪。我该怎么解释?__slots__工作不正常吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值