作者tyc5116 (累人啊....)
看板Python
标题[问题] funcion的参数问题
时间Wed Jul 15 10:27:23 2015
请问一下下面的范例
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该如何修改?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.52.121
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1436927248.A.A83.html
1F:→ uranusjr: 用 list[:] 可以拷贝 07/15 10:28
2F:→ uranusjr: Python 的 = 都是 pointer assignment, 不会隐性拷贝 07/15 10:29
3F:→ tyc5116: 我在func内加了__list = _List,我看这两个List的记忆体 07/15 10:32
4F:→ tyc5116: 并不是指向同一位置阿 07/15 10:32
5F:→ bibo9901: 记忆体? 你怎麽"看"? 如果是 id() 那一定是一样的 07/15 10:35
6F:→ tyc5116: 喔喔...我误会了,谢谢 07/15 10:36
7F:推 left: 当python写下a=b时,实际上他表示的不是你过去认知的样子 07/15 12:47
8F:→ left: a=b的意思是: 变数a参考变数b所指向的物件 07/15 12:48
9F:→ left: 如果b本身直接是一个物件那麽,例如a=[],那麽a就是直接参考 07/15 12:49
10F:→ left: 记忆体里面所占据的那个物件 07/15 12:50
11F:推 left: 然後python 物件又分 mutable以及immutable 07/15 12:52
12F:→ left: mutable的意思是物件本身可不可以更改,基本上list是mutable 07/15 12:53
13F:→ left: 一般整数变数是immutable 07/15 12:54
14F:→ left: mutable我在讲清楚一点好了 mutable代表物件本身可以扩增 07/15 12:56
15F:→ left: 所以在你的例子里_List它本身可以扩增,但如果你把 07/15 12:58
16F:→ left: _List.append('a')改成 _List=['b']那麽,_List就会指向['b'] 07/15 12:59
17F:→ left: 外面传进来的list物件此时不会受到影响 07/15 13:01
18F:→ left: 这个样的情况就会跟你func2的例子一样,func2里面的_int 07/15 13:03
19F:→ left: 会指向新的结果物件。 07/15 13:04