python中浅拷贝和深拷贝

python中浅拷贝和深拷贝 今天写python脚本,遇到了一个问题。先贴代码: #coding=utf-8 new_list = [] # 声明一个list tmp = {'a':123,'b':'ccc'} # 新建一个dict new_list.append(tmp) # 追加 print tmp print new_list tmp['a'] = 456 # 修改tmp tmp['b'] = 'ddd' new_list.append(tmp) # 追加 print tmp print new_list # 执行结果: {'a': 123, 'b': 'ccc'} [{'a': 123, 'b': 'ccc'}] # 当改变了tmp,list中的值也会变化 {'a': 456, 'b': 'ddd'} [{'a': 456, 'b': 'ddd'}, {'a': 456, 'b': 'ddd'}] 如果是PHP会发生什么? $b = array(); $a = array('b'=>123); array_push($b , $a); $a = array('b'=>456); array_push($b , $a); var_dump($b); $a = new ArrayObject(array('b'=>123)); $arr = new ArrayObject(); $arr->append($a); $a['b'] = 456; $arr->append($a); var_dump($arr); # 执行结果 array(2) { [0]=> array(1) { ["b"]=> int(123) } [1]=> array(1) { ["b"]=> int(456) } } object(ArrayObject)#2 (1) { ["storage":"ArrayObject":private]=> array(2) { [0]=> object(ArrayObject)#1 (1) { ["storage":"ArrayObject":private]=> array(1) { ["b"]=> int(456) } } [1]=> object(ArrayObject)#1 (1) { ["storage":"ArrayObject":private]=> array(1) { ["b"]=> int(456) } } } } 由结果看,PHP中array_push方法和array_object的结果也不同。...

November 10, 2014 · 1 min · Me