多次追加后python列表值修改的行为
我使用运算符“*”追加并展开一个列表多次追加后python列表值修改的行为,python,Python,我使用运算符“*”追加并展开一个列表 >>> A = [[0, 0]] * 2 >>> A [[0, 0], [0, 0]] 当我试图修改第一个列表项中的第一个元素时,它修改了列表中所有项中的第一个元素 >>> A[0][0] = 10 >>> A [[10, 0], [10, 0]] 你能帮我解释一下原因吗?背后的机制是什么?乘法创建引用的副本,而不是对象的副本。该引用类似于C中的指针,两个引用都指向内存中的同一对象,
>>> A = [[0, 0]] * 2
>>> A
[[0, 0], [0, 0]]
当我试图修改第一个列表项中的第一个元素时,它修改了列表中所有项中的第一个元素
>>> A[0][0] = 10
>>> A
[[10, 0], [10, 0]]
你能帮我解释一下原因吗?背后的机制是什么?乘法创建引用的副本,而不是对象的副本。该引用类似于C中的指针,两个引用都指向内存中的同一对象,但该对象只有一个副本 如果要创建该对象的副本,请执行以下操作:
A = [[0, 0] for _ in range(2)]
这是一个生成器表达式,python将“运行”迭代,因此每次都创建一个新元素。Multiply创建引用的副本,而不是对象的副本。该引用类似于C中的指针,两个引用都指向内存中的同一对象,但该对象只有一个副本 如果要创建该对象的副本,请执行以下操作:
A = [[0, 0] for _ in range(2)]
这是一个生成器表达式,python将“运行”迭代,因此每次都创建一个新元素。Multiply创建引用的副本,而不是对象的副本。该引用类似于C中的指针,两个引用都指向内存中的同一对象,但该对象只有一个副本 如果要创建该对象的副本,请执行以下操作:
A = [[0, 0] for _ in range(2)]
这是一个生成器表达式,python将“运行”迭代,因此每次都创建一个新元素。Multiply创建引用的副本,而不是对象的副本。该引用类似于C中的指针,两个引用都指向内存中的同一对象,但该对象只有一个副本 如果要创建该对象的副本,请执行以下操作:
A = [[0, 0] for _ in range(2)]
这是一个生成器表达式,python将“运行”迭代,因此每次都创建一个新元素。
a
包含对同一列表的两个引用。你所做的基本上和
AA = [0, 0]
A = [AA, AA]
因此,a[0]
、a[1]
和AA
的修改是等效的
解决方法:
A = [[0, 0], [0, 0]]
或者,如文中所述
A
包含对同一列表的两个引用。你所做的基本上和
AA = [0, 0]
A = [AA, AA]
因此,a[0]
、a[1]
和AA
的修改是等效的
解决方法:
A = [[0, 0], [0, 0]]
或者,如文中所述
A
包含对同一列表的两个引用。你所做的基本上和
AA = [0, 0]
A = [AA, AA]
因此,a[0]
、a[1]
和AA
的修改是等效的
解决方法:
A = [[0, 0], [0, 0]]
或者,如文中所述
A
包含对同一列表的两个引用。你所做的基本上和
AA = [0, 0]
A = [AA, AA]
因此,a[0]
、a[1]
和AA
的修改是等效的
解决方法:
A = [[0, 0], [0, 0]]
或者,如文中所述
*
不是列表的“附加运算符”。*
不是列表的“附加运算符”。*
不是列表的“附加运算符”。*
不是列表的“附加运算符”。