亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教python中的copy和deepcopy的問題

請教python中的copy和deepcopy的問題

慕村225694 2018-07-16 15:13:08
按理說copy是淺拷貝,只是復制了指針引用, 而深拷貝會重新創建一個新對象,然后復制對象數據內容。 但是下面的代碼證明我上面的理解是錯誤的: import copy a = [8,9] b = copy.copy(a) c= a[:]print "before\t",a,b,c b[1] = 8print "changed\t",a,b,c上面將輸出: before  [8, 9] [8, 9] [8, 9] changed [8, 9] [8, 8] [8, 9]也就是說修改b中的值,不會影響到a和c 如果把copy換成deepcopy結果完全一致,為什么呢?
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

google group中找到了想要的答案

Python中有一類對象是不可以原地修改的:數字、字符串、元組

當你對它修改時,Python會創建出新的對象。 
a = 3 
b = a 
b = 4 
print b    # Prints 4 
---------------- 
另一類對象是可以原地修改的:列表、字典等等 
L1 = [1,2] 
L2 = L1 
L2[1] = 3 
print L1,L2  #Prints [1,3] [1, 3] 

============================== =========== 
另:變量和對象本身在內存中是分離的, 變量中有個叫做引用的部分用來指向相應的引用。 

所以,你拷貝了一個不可變的對象的引用, 修改你得到的變量只會讓該變量的引用指向一個新的對象, 別指望還能改變原來的變量的引用所指向對象的值。


查看完整回答
反對 回復 2018-07-17
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

lass Obj(object):
    def __init__(self,num):
        self.num=num
    def __str__(self):
        return str(self.num)

    __repr__=__str__def test(fun):
    a=[ Obj(10),Obj(11) ]
    b=fun(a)    
    print 'a=%s,b=%s'%(a,b)
    a.reverse()
    a[0].num=100
    print 'a=%s,b=%s'%(a,b)
    
    print '='test(lambda _:_)
    
    print 'copy.copy'test(copy.copy)
    
    print 'copy.deepcopy'test(copy.deepcopy)


查看完整回答
反對 回復 2018-07-17
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

上面得出錯誤的結論,是因為數組中使用的是int,而不是復雜類型?

查看完整回答
反對 回復 2018-07-17
  • 3 回答
  • 0 關注
  • 590 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號