我编写以下程序以查看函数如何在Python中工作
def mylove(a):
a=a+1
a=2
mylove(a)
print(a)
当我打印(a)时,为什么是2而不是3
另一方面对于以下代码
def puzzle(name):
name.pop()
name=['s','s','s']
puzzle(name)
print(name)
我们有结果['s','s']
整数是不可变的数据类型,因此无法更改。
线
a +=1
是的快捷方式
a=a+1
发生的情况是,在函数范围内,变量标签“ a”被分配给新的不同整数,而原始整数作为内存中的对象保持不变。
在函数之外,标签“ a”仍指向原始的不变整数对象。
id()函数可用于显示两个变量的基础内存对象是否相同
>>> a =1
>>> def f(a):
... print('before',id(a))
... a+=1
... print('after',id(a))
...
>>> print('outside',id(a));f(a);print('outside',id(a))
outside 504120010720
before 504120010720
after 504120010752
outside 504120010720
>>>
after对象是与其他三个对象不同的对象。
相反,诸如列表之类的可变内容可用于将更改发送到函数之外。
>>> b=[]
>>> def g(b):
... print('before',id(b))
... b.append(5)
... print('after',id(b))
...
>>> print('outside',id(b));g(b);print('outside',id(b))
outside 504083879680
before 504083879680
after 504083879680
outside 504083879680
>>> print(b)
[5]
after对象与其他三个对象相同。
最重要的是,append()修改内存中的同一对象,仅允许对可变对象进行修改。
使用+ =不会修改原始对象,但会产生一个全新的对象,该对象被分配给变量名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句