python - 关于列表中的声明列表和赋值值的python错误
问题描述
a=[['']*2]*2
a[0][1]='previous'
a[1][1]='new'
print(a[0][1])
此代码的结果是“新”而不是“以前”。当我将列表的声明更改为 a=[ [[''],['']], [[''],['']] ] 现在没问题。但为什么有区别?
解决方案
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']]
推荐阅读
- bash - 根据分隔符在bash中拆分字符串
- android - Android 运行时权限问题
- python - 将一列中的单元格组合成一个字符串
- machine-learning - 微调 Resnet-50 模型所需的特定训练数据量
- bash - Bash 提取 tar.gz 文件
- ubuntu - Ubuntu Systemd 脚本无法正确执行
- error-handling - 客户端错误请求的 400 与 422
- javascript - 如何在Javascript函数中返回动态(键,值)对
- dotnetnuke - 窗格和容器之间的 DNN 差异(与 Wordpress 相比)
- python-3.x - 使用 ISO 8601 时间戳和自定义刻度解析多个 *.csv