Python 中变量的赋值问题
最近在看Python,想去实现一个基数排序
偶尔使用了以下代码:
alist = [[]] * 10
alist[3].append(23)
#预计输出:[[],[],[],[23],[],[],[],[],[],[]]
#实际输出:[[23],[23],[23],[23],[23],[23],[23],[23],[23],[23]]
然后尝试了以下代码:
alist = [[],[],[],[],[],[],[],[],[],[]]
alist[3].append(23)
#输出:[[],[],[],[23],[],[],[],[],[],[]]
根据输出的对比产生以下猜想:
这样的赋值过程中,alist中的所有item其实指向的是同一个地址。
所以使用append()改变其中任何一个值得时候,其他值同时改变
当然,将item赋予新的值则不会产生影响
使用以下代码进行验证:
alist = [[]] * 10
for item in alist:
id(item)
#Output:
44889392
44889392
44889392
...
alist = [[],[],[],[],[],[],[],[],[],[]]
for item in alist:
id(item)
#Output:
Daniel Karl