python list和array(np.array, array.array)在内存中的不同

(python)列表和字典的存储方式_字典的存储结构-CSDN博客

数组: array,主要使用的有两种:array.array和np.array。

array.array 和 np.array 分别来自 Python 标准库中的 array 模块和流行的数值计算库 NumPy。它们之间有几个重要的区别:

数据类型支持:
array.array:array.array 支持基本的数据类型,比如整数、浮点数等。但是在 array.array 中,所有元素的类型必须一致,只能存储“数”,也就是数字类的。
np.array:NumPy 的 np.array 支持更多的数据类型,并且允许创建多维数组。NumPy 数组可以包含不同类型的元素。


功能和性能:
array.array:array.array 提供了基本的数组功能,但相对来说功能较为有限。它不支持向量化操作和广播(broadcasting)等高级功能。
np.array:NumPy 的 np.array 提供了丰富的数学函数和操作,支持向量化操作和广播,能够高效处理大规模数据。NumPy 数组通常比 Python 原生的数据结构更快更有效率。

用途:
array.array:适合简单的数组操作和存储基本数据类型的数组。
np.array:适合进行复杂的数值计算、数学运算、线性代数操作以及处理大型数据集等任务。
总的来说,如果你需要进行复杂的数值计算、处理大规模数据集或者需要高效的向量化操作,那么应该选择 NumPy 的 np.array。如果只需要简单的数组操作且数据类型一致,可以考虑使用 Python 标准库中的 array.array。

总的来说,np.array和array.array都是数组:只要是数组,它们就有下面的基本要求:

(1)其中的元素在内存中的连续的,在一开始定义数组的时候,就要确定好其数据类型和大小,这个数组的大小就固定了。可以理解为,数组的内存分布是一次性完成的,确定了之后不能再更改,因为不确定再向后连续扩展内存会不会覆盖新需要的内存的有效数据。

data1

data2

data3

data4

(2)列表:其中存储的是元素的引用,其引用指向的元素在内存中不一定是连续的,所以list可以很方便的扩展元素。(但是list中元素的引用在内存中好像是连续的,list能扩张内存的引用可能和python的一些管理机制有关,知道list比较方便扩张元素,而且是在原来list上进行扩张的就可以了)

a = np.array([1,2,3])
b = np.append(a, 4)
因为np.array有数组的一次性,所以b其实是创建一个新的数组,重新创建了一个新的,所以
也没有a.append()这种用法,因为不是在a的基础上改的,而是用np.append这种方式,去创建一个
新的数组。

lst = [1,2,3]
lst.append(4)
因为list的append的内存中存储的是引用,所以其会在原来的list上进行修改,并不会创建重复的数据。

从上面可以看出来,在某些情况下,使用list可以减少一些不必要的数据重复,而numpy一旦确定,可以改变其中的数据的值,但是如果再修改其长度或者数据类型什么的,可能需要一些新的数组的创建。

定义数组的时候,其中的数据应该是大小也保持统一的。

a = np.array([[1,2,3], [1], [1,2])
数组在内存中的占用就是:长度*数据大小,所以数组中每个数据占据的内存大小应该是一致的,这是要求。

import sys
a = [1,2,3]
b = [1,2]
c = [1]
d = []
print(sys.getsizeof(a))  # 80
print(sys.getsizeof(b))  # 72
print(sys.getsizeof(c))  # 64
print(sys.getsizeof(d))  # 56

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小哇123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值