a315734685 发表于 2020-8-22 22:32:16

二维列表索引赋值的问题

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

maplist = '石柒'
for i in maplist:
    print(i)

提问:
为什么maplist = '石柒' 会赋值给所有子列表的第4个元素呢,
这样的索引不应该是赋值给 maplist 第3个"元素"(列表), 的第4个元素呢? (如图中选中的'石柒')

a315734685 发表于 2020-8-22 22:33:01

在线等,{:10_266:}

a315734685 发表于 2020-8-22 22:37:48

打印也只是提取一个元素出来而已啊......{:5_94:}

a315734685 发表于 2020-8-22 22:38:43

!!!!!!!!!!!!!!我知道了, 内存指向问题!!

Twilight6 发表于 2020-8-22 22:39:07



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

所以只要一个改变,其他肯定会变,因为是同个列表,id 内存地址相同

a315734685 发表于 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 = '石柒'
for i in maplist:
    print(i)

Twilight6 发表于 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 = '石柒'
for i in maplist:
    print(i)

Twilight6 发表于 2020-8-22 22:42:11

a315734685 发表于 2020-8-22 22:40
maplist = []
twolist = []
for j in range(10):




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

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

页: [1]
查看完整版本: 二维列表索引赋值的问题