3 回答

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
google group中找到了想要的答案
Python中有一類對(duì)象是不可以原地修改的:數(shù)字、字符串、元組
當(dāng)你對(duì)它修改時(shí),Python會(huì)創(chuàng)建出新的對(duì)象。
a = 3
b = a
b = 4
print b # Prints 4
----------------
另一類對(duì)象是可以原地修改的:列表、字典等等
L1 = [1,2]
L2 = L1
L2[1] = 3
print L1,L2 #Prints [1,3] [1, 3]
============================== ===========
另:變量和對(duì)象本身在內(nèi)存中是分離的, 變量中有個(gè)叫做引用的部分用來(lái)指向相應(yīng)的引用。
所以,你拷貝了一個(gè)不可變的對(duì)象的引用, 修改你得到的變量只會(huì)讓該變量的引用指向一個(gè)新的對(duì)象, 別指望還能改變?cè)瓉?lái)的變量的引用所指向?qū)ο蟮闹怠?/p>

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
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)

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
上面得出錯(cuò)誤的結(jié)論,是因?yàn)閿?shù)組中使用的是int,而不是復(fù)雜類型?
- 3 回答
- 0 關(guān)注
- 587 瀏覽
添加回答
舉報(bào)