Python 拷貝問題

先來看一段代碼:

class Solution:
    def mark1(self, r, l):
        mark = []
        for i in range(r):
            mark.append([True] * l)
        return mark

    def mark2(self, r, l):
        mark = []
        ls = [True] * l
        for i in range(r):
            mark.append(ls)
        return mark

if __name__ == '__main__':
    s = Solution()
    mark1 = s.mark1(3, 3)
    print mark1
    mark1[2][1] = False
    print mark1

    mark2 = s.mark2(3, 3)
    print mark2
    mark2[2][1] = False
    print mark2

兩次的輸出結(jié)果一樣么?
不一樣的。
輸出如下:

[[True, True, True], [True, True, True], [True, True, True]]
[[True, True, True], [True, True, True], [True, False, True]]
[[True, True, True], [True, True, True], [True, True, True]]
[[True, False, True], [True, False, True], [True, False, True]]

可以看到 mark2 出問題了,明明更改的是 mark[2][1],mark[0][1] 和 mark[1][1] 也改變了,問題出在mark2的

ls = [True] * l
for i in range(r):
    mark.append(ls)

也就是三行都是同一個對象,所以在更改的時候一起更改了。
Python的列表類型傳遞的都是引用,這里要多注意。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 個人筆記,方便自己查閱使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik閱讀 67,949評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,590評論 19 139
  • 只想說,走的腿要斷了。 廣州琶洲地鐵站C口出,背后就少保利大廈,是廣州設(shè)計(jì)周。網(wǎng)上登記,微信預(yù)約,電話預(yù)約三種方式...
    夢海蓉閱讀 291評論 0 0
  • 原來,丘比特確實(shí)會因?yàn)榧夹g(shù)問題,而弄錯方向。所以,丘比特需要好好練習(xí)。 當(dāng)我以為群主大大就是你的時候,當(dāng)我正在為之...
    棲小熊閱讀 331評論 13 4
  • 昨天在蘇州體育場看了周杰倫地表最強(qiáng)演唱會。去聽聽屬于我青春的歌聲。 演唱會中隔壁姑娘: “終于有老歌了”。演唱會退...
    李乾坤David閱讀 287評論 0 0

友情鏈接更多精彩內(nèi)容