2024-04-19 06:59:47 发布
网友
a = [0]*4 a[0]= 1 print(a)
根据Strange behavior of lists in python中解释的列表行为,*创建对对象的引用,而不是值的副本,Output是[1,0,0,0],而它应该是[1,1,1,1]。 请解释一下
是的,使用重复操作符*,可以创建对列表中对象的多个引用。但是,a[0] = 1不会修改那些对象,而是修改列表。你知道吗
*
a[0] = 1
如果您可以修改列表中的对象(在本例中,您不能修改,因为int对象是不可变的),然后您确实修改了这些对象,那么您将看到相同的行为。你知道吗
int
注意,即使对可变对象使用a[0] = <something>,它也不会这样:
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对象没有维度。你知道吗
list
是的,使用重复操作符
*
,可以创建对列表中对象的多个引用。但是,a[0] = 1
不会修改那些对象,而是修改列表。你知道吗如果您可以修改列表中的对象(在本例中,您不能修改,因为
int
对象是不可变的),然后您确实修改了这些对象,那么您将看到相同的行为。你知道吗注意,即使对可变对象使用
a[0] = <something>
,它也不会这样:您必须实际修改列表中的对象:
您缺少的基本区别是修改列表本身与列表中的对象之间的区别。你知道吗
另外,请注意,
list
对象没有维度。你知道吗相关问题 更多 >
编程相关推荐