首页 > 解决方案 > 关于列表中的声明列表和赋值值的python错误

问题描述

a=[['']*2]*2
a[0][1]='previous'    
a[1][1]='new'
print(a[0][1])

此代码的结果是“新”而不是“以前”。当我将列表的声明更改为 a=[ [[''],['']], [[''],['']] ] 现在没问题。但为什么有区别?

标签: python

解决方案


a=[['']*2]*2

以上可以分解为:

a = ['']*2 #result: a = ['', ''] --> it copies value of '' since '' is a string
a = [a]*2 #result: a = [a,a] --> which means it copies the reference of a instead of its value since a is a list.

a[0][1]='previous'   # result: [['', 'previous'], ['', 'previous']]

推荐阅读