有关Python功能及其工作方式的一些问题

89085731

我编写以下程序以查看函数如何在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']

马特·米格尔(Matt Miguel)

整数是不可变的数据类型,因此无法更改。

线

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有关SymmetricDS Embedded的一些问题

来自分类Dev

有关班级的一些问题

来自分类Dev

有关资源的一些问题

来自分类Dev

有关Angularjs指令的一些问题

来自分类Dev

有关轮询的一些问题

来自分类Dev

有关光缆的一些问题

来自分类Dev

非常感谢有关分组实际工作方式的一些帮助

来自分类Dev

有关带有Openlayers3的WFS-T的一些问题

来自分类Dev

有关“ angularJS与Plupload一起使用的一些问题

来自分类Dev

有关“ angularJS与Plupload一起使用的一些问题

来自分类Dev

有关克隆/复制TR的一些问题

来自分类Dev

有关使用MongoDB Java驱动程序的一些问题

来自分类Dev

有关表格,css中的位置的一些问题

来自分类Dev

有关何时使用片段和活动的一些问题

来自分类Dev

使用jfugue转换密钥-有关Jfugue的一些问题

来自分类Dev

有关沙发床复制品细节的一些问题

来自分类Dev

有关Objective-C的一些问题

来自分类Dev

有关angular2提供程序的一些问题

来自分类Dev

有关OpenGL透明度的一些问题

来自分类Dev

Scrapy-有关刮论坛的一些问题

来自分类Dev

有关C语言中内存分配的一些问题

来自分类Dev

有关Progress-4GL中事件处理的一些问题

来自分类Dev

有关异常安全性和内存泄漏的一些问题

来自分类Dev

C ++ STL容器-有关类型的一些问题?

来自分类Dev

有关SSH密钥身份验证的一些问题

来自分类Dev

有关原型和数组的一些问题

来自分类Dev

有关解析multiplt Spring View解析器的一些问题

来自分类Dev

有关沙发床复制品细节的一些问题

来自分类Dev

有关指向班级成员的指针的一些问题