对于Python列表-我们可以由此得出结论,对于每个新元素,我们需要另外八个字节来引用新对象。新的整数对象本身消耗28个字节。列表“ lst”的大小,不包含元素的大小,可以使用以下公式计算:
64 + 8 len(lst) + _+ len(lst) _28
python中的list是python的内置数据类型,list中的数据类不必相同的,而array的中的类型必须全部相同。在list中的数据类型保存的是数据的存放的地址,简单的说就是指针,并非数据,这样保存一个list就太麻烦了,例如list1=[1,2,3,’a’]需要4个指针和四个数据,增加了存储和消耗cpu。
array底层是C语言。有步长strides,dimensions,data三属性。固定类型的numpy类型的数组array缺乏这种灵活,但是更方便进行存储和处理数据。
96 + n * 8 Bytes

数组还有一个特性:数组的大小一开始需要指定好,后期动态扩充会拷贝值
对于机器学习的同学来说:数组用的更多,一般都是用numpy的array。算法上不会使用list
from array import array#arr的类型 https://docs.python.org/3/library/array.htmla = array('b', [1, 3, 5])for item in a:print(item)#使用切片获取numbers_list = [2, 5, 62, 5, 42, 52, 48, 5]numbers_array = array('i', numbers_list)print(numbers_array[2:5]) # 3rd to 5thprint(numbers_array[:-5]) # beginning to 4thprint(numbers_array[5:]) # 6th to endprint(numbers_array[:]) # beginning to end#添加元素numbers = array('i', [1, 2, 3, 5, 7, 10])# changing first elementnumbers[0] = 0print(numbers) # Output: array('i', [0, 2, 3, 5, 7, 10])# changing 3rd to 5th elementnumbers[2:5] = array('i', [4, 6, 8])print(numbers) # Output: array('i', [0, 2, 4, 6, 8, 10])#通过extend和append方法扩展数组numbers = array('i', [1, 2, 3])numbers.append(4)print(numbers) # Output: array('i', [1, 2, 3, 4])# extend() appends iterable to the end of the arraynumbers.extend([5, 6, 7])print(numbers) # Output: array('i', [1, 2, 3, 4, 5, 6, 7])#使用+连接数组odd = array('i', [1, 3, 5])even = array('i', [2, 4, 6])numbers = array('i') # creating empty array of integernumbers = odd + evenprint(numbers)
