mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-13 15:29:53 +08:00
deploy
This commit is contained in:
@@ -3705,8 +3705,13 @@
|
||||
<li>缓存不友好:由于数据不是连续存放的,因此 <code>std::list</code> 对缓存的利用率较低。一般情况下,<code>std::vector</code> 的性能会更好。</li>
|
||||
</ul>
|
||||
<p>另一方面,必要使用链表的情况主要是二叉树和图。栈和队列往往会使用编程语言提供的 <code>stack</code> 和 <code>queue</code> ,而非链表。</p>
|
||||
<p><strong>Q</strong>:初始化列表 <code>res = [0] * self.size()</code> 操作,会导致 <code>res</code> 的每个元素引用相同的地址吗?</p>
|
||||
<p>不会。但二维数组会有这个问题,例如初始化二维列表 <code>res = [[0]] * self.size()</code> ,则多次引用了同一个列表 <code>[0]</code> 。</p>
|
||||
<p><strong>Q</strong>:操作 <code>res = [[0]] * n</code> 生成了一个二维列表,其中每一个 <code>[0]</code> 都是独立的吗?</p>
|
||||
<p>不是独立的。此二维列表中,所有的 <code>[0]</code> 实际上是同一个对象的引用。如果我们修改其中一个元素,会发现所有的对应元素都会随之改变。</p>
|
||||
<p>如果希望二维列表中的每个 <code>[0]</code> 都是独立的,可以使用 <code>res = [[0] for _ in range(n)]</code> 来实现。这种方式的原理是初始化了 <span class="arithmatex">\(n\)</span> 个独立的 <code>[0]</code> 列表对象。</p>
|
||||
<p><strong>Q</strong>:操作 <code>res = [0] * n</code> 生成了一个列表,其中每一个整数 0 都是独立的吗?</p>
|
||||
<p>在该列表中,所有整数 0 都是同一个对象的引用。这是因为 Python 对小整数(通常是 -5 到 256)采用了缓存池机制,以便最大化对象复用,从而提升性能。</p>
|
||||
<p>虽然它们指向同一个对象,但我们仍然可以独立修改列表中的每个元素,这是因为 Python 的整数是“不可变对象”。当我们修改某个元素时,实际上是切换为另一个对象的引用,而不是改变原有对象本身。</p>
|
||||
<p>然而,当列表元素是“可变对象”时(例如列表、字典或类实例等),修改某个元素会直接改变该对象本身,所有引用该对象的元素都会产生相同变化。</p>
|
||||
|
||||
<!-- Source file information -->
|
||||
|
||||
|
||||
Reference in New Issue
Block a user