作者mantour (朱子)
看板Python
标题Re: [问题] 关於class的继承问题
时间Fri Jul 4 15:34:49 2008
※ 引述《qqttpp (ㄎ一欧)》之铭言:
: 最近发现我要
: from xxx import ooo
: aaa=ooo
: aaa.sss()...............(1)
: bbb=ooo
: bbb.sss()
: 这样却会发现我对aaa的总总行为(1)都会被bbb给继承
: 或是说他根本直接就是对ooo作
: 我後来把所有的东西都放到def __init__()里面
: 表面上似乎是就没有残留了
: 但是根本上还是会有问题
: 尤其是我用到threads的时候
: 有没有办法不要让我对aaa的行为不会去影响ooo
: 例如dictionary似乎也是有这样的现象
: a={1:1,2:2}
: b=a
写b=a的话,b和a会refer到同一个物件
如果要复制一份a的话
import copy
b=copy.copy(a)
再改变b就不会动到a了
可以参考
http://docs.python.org/lib/module-copy.html
顺便比较一下copy.copy和copy.deepcopy的不同:
a=[[1,2,3],['a','b','c']]
b=copy.copy(a)
这样 b和a是不同物件
但b[0]和a[0]是同一个物件,b[1]、a[1]也是同一个物件
(也就是shallow copy只copy a的最外层,里面的东西还是同一个)
要看效果的话,可以试试:
a[0]=a[0]+[4]
a[1].append('d')
print a
print b
比较一下a和b应该就能了解了
用deep copy的话就完全不用担心a,b会互相影响的问题
不过要注意recursion limit
这个问题和「继承」似乎没有关系?
: b[1]=3
: 结果a={1:3,2:2}
: ....我只想要改变b不想改变a阿.....
: 请问是不是有什麽地方是我忽略的
: 谢谢罗~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.57.64.211
※ 编辑: mantour 来自: 61.57.64.211 (07/04 16:08)
1F:推 qqttpp:大感激 说的很详细QQ 所以说大多时候就该用deepcopy罗 07/06 15:06