擅长:python、mysql、java
<p>任何<code>mutable</code>对象(如<code>list</code>)都可以被任何有权访问它的对象更改。例如,如果您的<code>getPosSize()</code>方法返回<code>list</code>本身,那么您可以进行影响相同列表的更改</p>
<pre><code>class One(object):
CLS_LST = [1, 2, 3]
def __init__(self):
self.lst = [4, 5, 6]
def get_cls_pos(self):
return One.CLS_LST
def get_pos(self):
return self.lst
class Two:
def do_smthng(self, data):
data.append(-1)
a = One()
print('This is One.CLS_LST: {}'.format(a.CLS_LST))
print('This is a.lst: {}'.format(a.lst))
b = Two()
print('Calling b do something with One.CLS_LST')
b.do_smthng(a.get_cls_pos())
print('This is One.CLS_LST: {}'.format(a.CLS_LST))
print('Calling b to do something with a.lst')
b.do_smthng(a.get_pos())
print('This is a.lst: {}'.format(a.lst))
</code></pre>
<p>此代码的结果将打印:</p>
<pre><code>This is One.CLS_LST: [1, 2, 3]
This is a.lst: [4, 5, 6]
Calling b to do something with One.CLS_LST
This is One.CLS_LST: [1, 2, 3, -1]
Calling b to do something with a.lst
This is a.lst: [4, 5, 6, -1]
</code></pre>
<p>如果确实要传递列表的副本,请尝试使用<code>return list[:]</code></p>