import sys
data=[]
for k in range(26):
a=len(data)
b=sys.getsizeof(data)
print('length:{:3d};size in dytes:{:4d}'.format(a,b))
data.append(None)
m=len(data)
n=sys.getsizeof(data)
for i in range(26):
data.pop()
m=len(data)
n=sys.getsizeof(data)
print('Length:{:4d};size in dytes:{:4d}'.format(m,n))
import ctypes #这以模块能创建底层数组
class Danamicarray:
def __init__(self):
self._n=0#长度
self._capacity=1 #容纳能力
self._A=self._make_array(self._capacity)#创建指定容量的数组A
def __len__(self):
return self._n
def __getitem__(self,k):
if not 0-self._n<=k<self._n:
raise IndexError('Invalid index')
if k>=0:
return self._A[k]
else:
j=self._n+k
return self._A[j]
def append(self,obj):
if self._n==self._capacity:
self._resize(2*self._capacity)#按两倍来扩容
self._A[self._n]=obj
self._n+=1
def resize(self,c):#将容量扩展到c
B=self._make_array(c)#从新定义尺寸的时候,系统会新建一个序列
for k in range(self._n):
B[k]=self._A(k)
self._A=B
self._capacity=c
def _make_array(self,c):#新建一个容量为c的序列
return (c*ctypes.py_object)()
if __name__=='__main__':
dy=Danamicarray()
dy.append('ab')
a=dy._A[-1]
print(a)