python保存list数据_python中list和np.array的数据存取

Python提供了许多内置的数据集合类型,如:列表(list);元组(tuple);字典(dictionary);集合(set)...

Python最基本的两个集合类型就是列表与元组,它们都表示对象序列。它们的区别是:列表是动态的,其大小可以改变;元组是不可变的(immutable),可哈希的(hashable),一旦创建就不能修改。

所以动态的数据结构list,它的使用细节和原理更值得推敲:Python中的列表是由对其他对象的引用组成的连续数组。指向这个数组的指针及其长度被保存在一个列表头结构中。这意味着,每次添加或删减一个元素时,由引用组成的数组需要改变大小(Python在创建这些数组时采用了指数过分配(exponential over-allocation),所以并不是每次操作都需要改变数组大小)。

按可变、不可变区分python的对象还有:

不可变(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)

可变(mutable):字典型(dictionary)、列表型(list)

本文以下主要关注list 和np.array的存取变化情况:

list类型数据的存取:

1、如下图的Y和Y_1的赋值方式(Y_1 = Y),他们共享同一个数据。

Y = [1,2,3,3,5]

yy = 0.9

Y_1 = Y

Y[1] = yy #改变Y,Y_1也跟着相应改变

print('Y :',Y)

print('Y_1:',Y_1)

print('Y id:',id(Y))

print('Y_1 id:',id(Y_1))#Y,Y_1有相同的地址

2、如下图的Y和Y_1的赋值方式(Y1 = Y[::] ),即把Y中的数据完全复制,并另外开辟地址赋值给Y_1。(Y[::] 切片方式、Y[1] 下标方式)

numpy.array类型数据的存取:

Numpy中使用ndarray对象表示数组,它是整个库的核心对象。

可以使用和列表相同的方式对数组元素进行存取:

与列表不同的是,通过切片获取的数组是原始数组的一个视图,与原始数组共享同一块数据存储空间。

多维数组中可以使用整数列表或元组、整数数组和布尔数组作为下标对数组元素进行存取。当下标中使用这些对象时,所获得的数据是原始数据的副本,因此修改结果数据不会改变原始 数组 。

如果下标元组中只包含整数和切片,那么得到的数组和原始数组共享数据,它是原始数组的视图。

切片调用如下图所示(原始数组的视图):

元组调用如下图所示(互不影响):

最后如果 要复制整个多维数组,又不想只是一个视图,可以采用copy()方法,如下图 所示(互不影响):

参考:NumPy 副本和视图 | 菜鸟教程​www.runoob.com

Python科学技术(第2版) 张若愚(著 )清华大学出版社 第二章:Numpy快速处理数据

Python高级 编程 :第2版/ (波) 贾沃斯基(Michal jaworski),(法);莱德(Tarek Ziade)著;张亮,阿信译.--北京:人民邮电出版社 2017.10 2.1节Python的内置 类型 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值