my_list = [0] * 3
my_list[0] = 1
输出到
my_2ndlist = [[0] * 3] * 3
my_2ndlist[1][1] = 5
输出到
我想我知道
有什么解释能帮我更好地理解吗?非常感谢.
my_list = [0] * 3
my_list[0] = 1
输出到
my_2ndlist = [[0] * 3] * 3
my_2ndlist[1][1] = 5
输出到
我想我知道
有什么解释能帮我更好地理解吗?非常感谢.
当你打印my_list[0], my_list[1], my_2ndlist[0], my_2ndlist[1]
个地址时,你会看到my_list[0], my_list[1]
有两个不同的地址,my_2ndlist[0], my_2ndlist[1]
有相同的地址.
my_list = [0] * 3
my_list[0] = 1
print(my_list)
print(id(my_list[0]), id(my_list[1]))
my_2ndlist = [[0] * 3] * 3
my_2ndlist[1][1] = 5
print(my_2ndlist)
print(id(my_2ndlist[0]), id(my_2ndlist[1]))
这是因为[0] * 3
将复制一个值为零的整数对象3次.在python中,当复制基元类型的对象时,它们会被深度复制(integer是基元类型).但是,[[0] * 3] * 3
这将复制列表[0, 0, 0]
3次.列表不是基元类型的对象,因此它们是浅复制的.也许this link会帮助你理解.