作者anrris ( ...)
看板Python
标题[问题] 一个很基本的问题
时间Sat Apr 10 05:30:18 2010
我发现一些小问题 ..
今天如果我要操作两个变数 a,b 如下
a,b=1,2
a=b
a,b=3,4
print a,b
会输出 : 3 4 .. (没问题)
可是如果今天是 List:
c,d = [1,2], [3,4]
c = d
c[0]='a'
d[1]='b'
print c, d
会输出 : ['a', 'b'] ['a', 'b']
这样让我感觉 List c d 内的元素互相 "参照" 了对方 .. 所以变成了同样的变数 ..
当然,这个状况可以由此改进 ... c = lsit(d) ... 如此就没问题了
但是, 同样的状况却发生在自己定义的 Class 所产生的物件之间
class C:
"A test Class"
def __init__(self,val):
self.val = val
e, f = C(1), C(2)
e=f
e.val = 3
print e.val, f.val
会输出 : 3 3
这样感觉是 f 并非将其内的元素 copy 一份到 e 里面 ....
我尝试去找了类似 C++ 复写 operator = 的方法来处理这样的问题 ...
之前有大大告诉我来研究 __set__ 。并且 __set__ 伴随着 __get__
经常会成对出现在文章里面 .....
但是我完全看不懂这两个东西真正实质操作的意义阿 @@ ....
网路上面写的例子与资源也很少, 还想请各位指点迷津 ~
感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 98.201.60.113
※ 编辑: anrris 来自: 98.201.60.113 (04/10 05:47)
1F:→ gasolin:一般list是用参考的, 要像int那样用请查deepcopy 04/10 06:16