回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想澄清一下:</p>
<p>例如,我创建了一个函数,该函数在本地创建一个列表并返回它。Python如何创建存在于函数体外部的返回列表?它使用“deepcopy”(或类似的东西)吗?</p>
<pre><code>In [50]: def create_list():
...: sublist1 = [1,2,3]
...: sublist2 = [4,5,6]
...: list_of_lists=[sublist1,sublist1,sublist2]
...: return list_of_lists
...:
In [51]: l=create_list()
In [52]: l
Out[52]: [[1, 2, 3], [1, 2, 3], [4, 5, 6]]
In [53]: l[0].<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(4)
In [54]: l
Out[54]: [[1, 2, 3, 4], [1, 2, 3, 4], [4, 5, 6]]
</code></pre>
<p>在这里,返回的列表<code>l</code>仍然包含子列表。而<code>l[0]</code>和<code>l[1]</code>仍然引用相同的子列表(这是正常的Python行为)。所以这个列表和它的结构被复制了。</p>
<p>如果我再打电话给<code>create_list()</code>:</p>
<pre><code>In [55]: l2=create_list()
In [56]: l2
Out[56]: [[1, 2, 3], [1, 2, 3], [4, 5, 6]]
In [57]: l
Out[57]: [[1, 2, 3, 4], [1, 2, 3, 4], [4, 5, 6]]
</code></pre>
<p>已经创建了一个新的列表<code>l2</code>,但是<code>l</code>不受影响,这意味着它确实存在于函数外部,并且它的子列表是它自己的,而不是引用仍然存在于函数体中的子列表。</p>
<p>所以我的问题是:Python是使用deepcopy还是类似的东西来制作<code>l</code>?
不管我用函数返回哪种类型的对象,它都不会受到对该函数的后续调用的影响?
(只要对象是在函数中本地创建的)</p>
<p>如果我说得不够清楚,请毫不犹豫地告诉我。
谢谢</p>