In [39]: import copy
In [40]: def test(a_hash,b_hash):
....: b_hash = copy.deepcopy(a_hash)
....: print b_hash
....:
In [41]: a = {}
In [42]: b = {}
In [43]: a[1] = 1
In [44]: test(a,b)
{1: 1}
In [45]: b
Out[45]: {}
为什么b是空的啊?
我用b_hash = a_hash 或者 b_hash = a_hash.copy()
得到的b都是空的呢?奇怪?
如果是我,我会在函数里面声明b是global的,而不是用似是而非的传值传指针,你这样写是想说b_hash传递的是指针,可惜python里一旦用“=”赋值就已经相当于声明了一个新的变量,所以你的这个问题两种解决办法:
第一个,把你要传指针的东西放到列表里:
def test(aa,bb):这样保证你可以通过b这个名字找到改变后的指针。
第二个,在函数里声明你要修改的是全局变量:
def test(aa):当然,你还可以用既不是global也不是local的局部作用域,那可以说叫闭包,但有些不好懂就不说了。。。
楼上的方法思想和第一种一样,但是没做深层拷贝,一层for循环没有递归实现了copy.copy,而不是copy.deepcopy。。。
test函数中的b_hash是b的一个拷贝,用深拷贝操作等于是创建一个对象,让b_hash指向它,跟b没有关系;另外即便是浅拷贝,也是b_hash=a_hash,同样与b没有关系。一个的方法是让b_hash指向的对象发生变化,经实验,是可行的。
def test(a_hash,b_hash):