码迷,mamicode.com
首页 > 编程语言 > 详细

Mutable and Immutable Variables in Python

时间:2018-09-23 11:51:00      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:inf   结果   修改   技术分享   fun   http   def   mutable   and   

本文解决python中比较令人困惑的一个小问题:传递到函数中的参数若在函数中进行了重新赋值,对于函数外的原变量有何影响。看一个小栗子:

def fun(a):
    a=2
    return
a=1
fun(a)

请问程序执行后,a=1还是2?并解释原因。

 

实际上,这个问题有两个比较tricky的地方:

1. python的变量是没有类型的,类型属于对象,也就是说a就是一个指针,可以指向任何类型的对象,哪怕先后指向不同类型的对象也不会出错。

2. python中的对象分为mutable和immutable两种,二者在作为参数传递时有根本的区别。各个类型的对象分类见下表:

技术分享图片

 

首先,代码中a=1的意思是,创建变量a(指针a),指向数字1这个对象的地址。在调用fun(a)的时候,因为数字对象是immutable的,所以传递到fun函数中的参数,实际上并不是a,而是a的复制品,暂且说成是b。b也是指向1这个对象的,所以说,之后在函数内部无论再怎么修改这个参数,和之前的变量a已经没有关系了。所以程序的执行结果是1。

 

再看一段代码:

def fun(a):
    a.append(4)
    return
a=[1,2,3]
fun(a)

 输出的结果是a=[1,2,3,4]。因为List是mutable的,所以传递到函数fun中的参数a是真真正正的a,而不是复制品。所以,在fun函数中对List的修改,会对函数外的a生效。

Mutable and Immutable Variables in Python

标签:inf   结果   修改   技术分享   fun   http   def   mutable   and   

原文地址:https://www.cnblogs.com/rhyswang/p/9692014.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!