<p>这在Python中是一个非常复杂的主题。</p>
<h2>实际答案</h2>
<p>数组由类<code>list</code>表示(请参见<a href="https://docs.python.org/2/tutorial/datastructures.html" rel="noreferrer">reference</a>,不要将它们与<a href="https://wiki.python.org/moin/Generators" rel="noreferrer">generators</a>混合)。</p>
<p>查看用法示例:</p>
<pre><code># empty array
arr = []
# init with values (can contain mixed types)
arr = [1, "eels"]
# get item by index (can be negative to access end of array)
arr = [1, 2, 3, 4, 5, 6]
arr[0] # 1
arr[-1] # 6
# get length
length = len(arr)
# supports append and insert
arr.append(8)
arr.insert(6, 7)
</code></pre>
<h2>理论答案</h2>
<p>Python的<code>list</code>是一个真正数组的包装器,它包含对项的引用。另外,底层数组是用一些额外的空间创建的。</p>
<p>其后果是:</p>
<ul>
<li>随机访问非常便宜(<code>arr[6653]</code>与<code>arr[0]</code>相同)</li>
<li><code>append</code>操作是“免费”的,但有一些额外的空间</li>
<li><code>insert</code>操作很昂贵</li>
</ul>
<p>检查这个<a href="https://wiki.python.org/moin/TimeComplexity" rel="noreferrer">awesome table of operations complexity</a>。</p>
<p>另外,请看这张图片,我试图展示数组、引用数组和链接列表之间最重要的区别:
<a href="https://i.stack.imgur.com/B2Q7K.png" rel="noreferrer"><img src="https://i.stack.imgur.com/B2Q7K.png" alt="arrays, arrays everywhere"/></a></p>