鱼C论坛

 找回密码
 立即注册
查看: 1326|回复: 7

[已解决]二维列表索引赋值的问题

[复制链接]
发表于 2020-8-22 22:32:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
maplist = []
twolist = []
for j in range(10):
    twolist.append('      ')
for i in range(10):
    maplist.append(twolist)

maplist[3][4] = '石柒'
for i in maplist:
    print(i)

提问:
为什么maplist[3][4] = '石柒' 会赋值给所有子列表的第4个元素呢,
这样的索引不应该是赋值给 maplist 第3个"元素"(列表), 的第4个元素呢? (如图中选中的'石柒')
最佳答案
2020-8-22 22:40:23
a315734685 发表于 2020-8-22 22:38
!!!!!!!!!!!!!!我知道了, 内存指向问题!!


对,改成这样就行,通过直接列表切片,等价于 copy 浅拷贝:
maplist = []
twolist = []
for j in range(10):
    twolist.append('      ')
for i in range(10):
    maplist.append(twolist[:])

maplist[3][4] = '石柒'
for i in maplist:
    print(i)
微信图片_20200822222532.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-22 22:33:01 | 显示全部楼层
在线等,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-22 22:37:48 | 显示全部楼层
打印也只是提取一个元素出来而已啊......
微信图片_20200822223652.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-22 22:38:43 | 显示全部楼层
!!!!!!!!!!!!!!我知道了, 内存指向问题!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-22 22:39:07 | 显示全部楼层


因为你所有列表中的列表都是添加一个 twolist 列表啊

所以只要一个改变,其他肯定会变,因为是同个列表,id 内存地址相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-22 22:40:07 | 显示全部楼层
maplist = []
twolist = []
for j in range(10):
    twolist.append('      ')
for i in range(10):
    temp = twolist.copy()
    maplist.append(temp)
# 这样就可以了, 初学者掉坑!

maplist[3][4] = '石柒'
for i in maplist:
    print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-22 22:40:23 | 显示全部楼层    本楼为最佳答案   
a315734685 发表于 2020-8-22 22:38
!!!!!!!!!!!!!!我知道了, 内存指向问题!!


对,改成这样就行,通过直接列表切片,等价于 copy 浅拷贝:
maplist = []
twolist = []
for j in range(10):
    twolist.append('      ')
for i in range(10):
    maplist.append(twolist[:])

maplist[3][4] = '石柒'
for i in maplist:
    print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-22 22:42:11 | 显示全部楼层
a315734685 发表于 2020-8-22 22:40
maplist = []
twolist = []
for j in range(10):



呃,每次回复都比你慢几秒

既然问题已经解决,那么就设置下最佳答案结账吧

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 08:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表