1、数组
数组的设计
数组设计之初是在形式上依赖内存分配而成的,所以必须在使用前预先请求空间。这使得数组有以下特性:
- 请求空间以后大小固定,不能再改变(数据溢出问题);
- 在内存中有空间连续性的表现,中间不会存在其他程序需要调用的数据,为此数组的专用内存空间;
- 在旧式编程语言中(如有中阶语言之称的C),程序不会对数组的操作做下界判断,也就有潜在的越界操作的风险(比如会把数据写在运行中程序需要调用的核心部分的内存上)。
因为简单数组强烈倚赖电脑硬件之内存,所以不适用于现代的程序设计。欲使用可变大小、硬件无关性的数据类型,Java等程序设计语言均提供了更高级的数据结构:ArrayList、Vector等动态数组。
python数组的实现
首先来一个错误的实现方法:1
2
3
4
5
63 list=[[]]*
list
[[], [], []]
0].append(3) list[
list
[[3], [3], [3]]
*号运算只是对原来数据的多次引用,也就是说实际上,我们用*号创建的二位数组其实只是将原来的一位数组复制了多次,我们并不能用其实现二维数组的功能。
官方推荐使用列表生成式:1
2
3
4for i in range(3)] list=[[]
0].append(3) list[
list
[[3], [], []]
所以,二维数组可以这样实现:1
2
30 for i in range(3)] for j in range(3)] array=[[
array
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]