添加到数组的Python Deque数组崩溃了python

时间:2015-12-02 02:00:46

标签: python arrays deque

我正在使用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 ...请帮忙

1 个答案:

答案 0 :(得分:0)

通常,与普通Python对象一起使用时,deques()绝不会崩溃。

使用 ctypes 时,所有投注均关闭,因为C调用通过了所有不变性检查,类型安全性检查,指针/索引范围检查等。

双端队列仅访问由 ctypes 创建的对象的有限功能。至少,它需要支持引用计数。要显示,需要 repr 。要删除()或索引(),它需要支持 eq ()。