[问题] funcion的参数问题

楼主: tyc5116 (累人啊....)   2015-07-15 10:27:23
请问一下下面的范例
def func(_List):
_List.append("a")
def func2(_int):
_int+=10
testList = []
testList.append("1")
testInt = 1
func(testList)
func2(testInt)
print(len(testList))
print(testInt)
出来的结果是2和1
testInt结果是我所预期的没问题,问题在于func
我传进去的的List为什么会被改变?
我希望传list进去后产生一个副本,副本可以被改变,但是原始的list不要作变动
那么我的func该如何修改?
作者: uranusjr (←這人是超級笨蛋)   2015-07-15 10:28:00
用 list[:] 可以拷贝Python 的 = 都是 pointer assignment, 不会隐性拷贝
楼主: tyc5116 (累人啊....)   2015-07-15 10:32:00
我在func内加了__list = _List,我看这两个List的内存并不是指向同一位置阿
作者: bibo9901 (function(){})()   2015-07-15 10:35:00
内存? 你怎么"看"? 如果是 id() 那一定是一样的
楼主: tyc5116 (累人啊....)   2015-07-15 10:36:00
喔喔...我误会了,谢谢
作者: left (881 forever)   2015-07-15 12:47:00
当python写下a=b时,实际上他表示的不是你过去认知的样子a=b的意思是: 变量a参考变量b所指向的物件如果b本身直接是一个物件那么,例如a=[],那么a就是直接参考内存里面所占据的那个物件然后python 物件又分 mutable以及immutablemutable的意思是物件本身可不可以更改,基本上list是mutable一般整数变量是immutablemutable我在讲清楚一点好了 mutable代表物件本身可以扩增所以在你的例子里_List它本身可以扩增,但如果你把_List.append('a')改成 _List=['b']那么,_List就会指向['b']外面传进来的list物件此时不会受到影响这个样的情况就会跟你func2的例子一样,func2里面的_int会指向新的结果物件。

Links booklink

Contact Us: admin [ a t ] ucptt.com