提问人:Emre Sagbas 提问时间:11/11/2022 最后编辑:Karl KnechtelEmre Sagbas 更新时间:11/11/2022 访问量:27
为什么用 [:] 复制列表(由函数调用)不起作用?
Why copying lists (which are called by functions) with [:] doesn't work?
问:
我有两个列表,例如:
prelist = [0, 0, 0, 0, 0]
postlist = [50.0, 25.0, 12.5, 6.25, 3.125]
我尝试像这样复制列表:
prelist = postlist[:]
但是周围的代码不起作用。 当我以这种方式复制列表时,我得到了所需的结果:
for i in range(5):
prelist[i] = postlist[i]
第一种方法有什么问题?
答:
0赞
user2357112
11/11/2022
#1
当和引用两个列表时,表示使列表引用的副本,然后使引用的新副本代替它用来引用的列表。用于引用的列表完全不受影响。该列表独立于变量而存在,并且根本不参与此操作。A
B
B = A[:]
A
B
A
B
B
听起来你正在寻找 ,它将内容复制到现有列表中引用,而不是制作新列表。B[:] = A
A
B
(请注意,切片在作业的左侧和右侧表示不同的含义。在右侧,计算为表达式将创建一个新列表。在左侧,指定将元素复制到现有列表中。[:]
A[:]
B[:]
评论
0赞
Karl Knechtel
11/11/2022
一旦问题添加了适当的信息,这似乎就有可能回答潜在的问题;但在这种情况下,它似乎很可能是重复的。当然,我们已经有一些东西来解释什么是以及如何使用它?鉴于这有多重要?B[:] = A
0赞
user2357112
11/11/2022
@KarlKnechtel:也许吧,但仅仅解释什么确实不能很好地解决问题。我认为重要的是要清楚地解释两者的作用,并强调其中的区别。我通常看到的与切片相关的问题的通用欺骗目标并不能有效地消除特定的误解。B[:] = A
B = A[:]
B[:] = A
0赞
Karl Knechtel
11/11/2022
不可能有那么多明显的“具体误解”,因为我们在这个话题上得到了问题。我们迫切需要找出适当的规范。(无论如何,我认为这里的误解根本不是关于切片的,而是关于Python的赋值语义,更一般地说是关于“引用语义”。
评论
prelist = postlist[:]
prelist
prelist