我正在使用python中的双端队列,除了我的preappend(添加到前面)方法之外,一切似乎都正常工作。当我在main中调用这个方法时它会崩溃python而且我很困惑为什么,这是我的代码:
import ctypes
class dequeArray:
def __init__(self):
"""Create an empty Array """
self._capacity = 4
self._data = self.makeArray(self._capacity)
self._dataSize = 0
self._front = 0
def makeArray(self, capacity):
capacity = self._capacity
return (self._capacity * ctypes.py_object)()
def isEmpty(self):
return self._dataSize == 0
def __len__(self):
return self._dataSize
def _userIndex2BlockIndex(self, userIndex):
return (self._front + userIndex)% self._capacity
def __getitem__(self, userIndex):
return self._data[userIndex]
def __setitem__(self, userIndex, value):
self._data[self._front(userIndex)] = value
def preappend(self, item):
if self._dataSize == 0:
self._data[self._front] = item
self._dataSize += 1
elif self._dataSize != self._capacity:
for e in range(self._dataSize-1,0,-1):
self._data[e] = self._data[e-1]
self._data[self._front] = item
self._dataSize += 1
else:
for e in range(self._capacity-1,0,-1):
self._data[e] = self._data[e-1]
self._data[self._front] = item
在主要我创建一个空的双端队列 d = dequeArray()
然后测试len(d)并且工作正常,但是当我这样做时 d.preappend(2) 它崩溃了python ...请帮忙
答案 0 :(得分:0)
通常,与普通Python对象一起使用时,deques()绝不会崩溃。
使用 ctypes 时,所有投注均关闭,因为C调用通过了所有不变性检查,类型安全性检查,指针/索引范围检查等。
双端队列仅访问由 ctypes 创建的对象的有限功能。至少,它需要支持引用计数。要显示,需要 repr 。要删除()或索引(),它需要支持 eq ()。