1. 程式人生 > >考慮以下 Python 代碼,如果運行結束,命令行中的運行結果是什麽?

考慮以下 Python 代碼,如果運行結束,命令行中的運行結果是什麽?

代碼 拷貝 nbsp 操作 淺拷貝 列表 round div span

1 1. l = []
2 2. for i in xrange(10):
3 3.     l.append({‘num’:i})
4 4. print l
1 1. l = []
2 2. a = {‘num’:0}
3 3. for i in xrange(10):
4 4.     a[‘num’] = i
5 5.     l.append(a)
6 6. print l

以上兩段代碼的運行結果是否相同,如果不相同,原因是什麽?

上方代碼的結果:

1 1. [{‘num’:0},{‘num’:1},{‘num’:2},{‘num’:3},{‘num’:4},{‘num’:5},{‘num’:6},{‘num’:7},{‘num’:8},
2 {‘num’:9}]

下方代碼結果:

1 1. [{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},
2 {‘num’:9}]

那麽原因來了:

原因是:字典是可變對象,在下方的 l.append(a)的操作中是把字典 a 的引用傳到列表 l 中,當後
續操作修改 a[‘num’]的值的時候,l 中的值也會跟著改變,相當於淺拷貝。

考慮以下 Python 代碼,如果運行結束,命令行中的運行結果是什麽?