对于Python列表-我们可以由此得出结论,对于每个新元素,我们需要另外八个字节来引用新对象。新的整数对象本身消耗28个字节。列表“ lst”的大小,不包含元素的大小,可以使用以下公式计算:
    64 + 8 len(lst) + _+ len(lst) _28
    7.1 python的数组细节 - 图1

    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

    7.1 python的数组细节 - 图2

    数组还有一个特性:数组的大小一开始需要指定好,后期动态扩充会拷贝值

    对于机器学习的同学来说:数组用的更多,一般都是用numpy的array。算法上不会使用list

    1. from array import array
    2. #arr的类型 https://docs.python.org/3/library/array.html
    3. a = array('b', [1, 3, 5])
    4. for item in a:
    5. print(item)
    6. #使用切片获取
    7. numbers_list = [2, 5, 62, 5, 42, 52, 48, 5]
    8. numbers_array = array('i', numbers_list)
    9. print(numbers_array[2:5]) # 3rd to 5th
    10. print(numbers_array[:-5]) # beginning to 4th
    11. print(numbers_array[5:]) # 6th to end
    12. print(numbers_array[:]) # beginning to end
    13. #添加元素
    14. numbers = array('i', [1, 2, 3, 5, 7, 10])
    15. # changing first element
    16. numbers[0] = 0
    17. print(numbers) # Output: array('i', [0, 2, 3, 5, 7, 10])
    18. # changing 3rd to 5th element
    19. numbers[2:5] = array('i', [4, 6, 8])
    20. print(numbers) # Output: array('i', [0, 2, 4, 6, 8, 10])
    21. #通过extend和append方法扩展数组
    22. numbers = array('i', [1, 2, 3])
    23. numbers.append(4)
    24. print(numbers) # Output: array('i', [1, 2, 3, 4])
    25. # extend() appends iterable to the end of the array
    26. numbers.extend([5, 6, 7])
    27. print(numbers) # Output: array('i', [1, 2, 3, 4, 5, 6, 7])
    28. #使用+连接数组
    29. odd = array('i', [1, 3, 5])
    30. even = array('i', [2, 4, 6])
    31. numbers = array('i') # creating empty array of integer
    32. numbers = odd + even
    33. print(numbers)