python中的列表引用单维列表的行为

2024-04-19 06:59:47 发布

您现在位置:Python中文网/ 问答频道 /正文

a = [0]*4
a[0]= 1
print(a)

根据Strange behavior of lists in python中解释的列表行为,*创建对对象的引用,而不是值的副本,Output是[1,0,0,0],而它应该是[1,1,1,1]。 请解释一下


Tags: of对象in列表output副本listsprint
1条回答
网友
1楼 · 发布于 2024-04-19 06:59:47

是的,使用重复操作符*,可以创建对列表中对象的多个引用。但是,a[0] = 1不会修改那些对象,而是修改列表。你知道吗

如果您可以修改列表中的对象(在本例中,您不能修改,因为int对象是不可变的),然后您确实修改了这些对象,那么您将看到相同的行为。你知道吗

注意,即使对可变对象使用a[0] = <something>,它也不会这样:

>>> x = [[]]*3
>>> x
[[], [], []]
>>> x[0] = [1] # modify the list
>>> x
[[1], [], []]

您必须实际修改列表中的对象:

>>> x = [[]]*3
>>> x
[[], [], []]
>>> x[0].append(1) # modify the in the list
>>> x
[[1], [1], [1]]

您缺少的基本区别是修改列表本身与列表中的对象之间的区别。你知道吗

另外,请注意,list对象没有维度。你知道吗

相关问题 更多 >