如何在python中获取动态数组的更新大小

时间:2018-03-02 17:54:44

标签: python-3.x

我该如何编辑代码?

import ctypes
import sys

class DynamicArray(object):

def __init__(self):
    self.n = 0 #counter 
    self.capacity = 1
    self.A = self.make_array(self.capacity)
def __len__(self):
    '''Returns the number of elements'''
    b = sys.getsizeof(self.A)
    print(b)
    return self.n
def __getitem__(self,k):
    '''Return elements in array with specified Index'''
    if not 0<=k<self.n:
        return IndexError('Index out of bounds')
    return self.A[k]
def append(self,ele):
    '''Add element in the array'''
    if self.n==self.capacity:
        self._resize(2*self.capacity)
    self.A[self.n]=ele
    self.n+=1


def _resize(self,new_cap):
    B = self.make_array(new_cap)
    for k in range(self.n):
        B[k]=self.A[k]
    self.A = B
    self.capacity = new_cap
def make_array(self,new_cap):
    '''Make a raw array using ctype module'''      
    return (new_cap*ctypes.py_object)()

arr = DynamicArray()
arr.append(1)
len(arr)
Output:
80
1
arr.append(1)
len(arr)

Output:
80
2

1 个答案:

答案 0 :(得分:0)

请参阅https://docs.python.org/3/library/sys.html#sys.getsizeof

来自文档:

以字节为单位返回对象的大小。该对象可以是任何类型的 目的。所有内置对象将返回正确的结果,但这 对于第三方扩展,不必保持原状 具体实施。

只有直接归因于该对象的内存消耗是 而不是它所引用的对象的内存消耗。

我希望这很清楚。