python可变类型与不可变类型作为函数参数区别_【Python面试】可变类型 vs 不可变类型...

面试题

Python的内置类型中可变类型和不可变类型都有哪些?解析

这一题目考察两个点,一个是python的内置类型,一个是可变/不可变类型的概念,对python基本功扎实的同学来说是比较简单的。

首先是python的内置类型,可以列举一些常用的像字符串(str),数字(int, float),布尔值(boolean),列表(list),字典(dict)等等,这个只要是用过python的基本都会。

接下来是可变/不可变类型的含义。个人理解,可变类型和不可变类型的差别在于修改变量时是否还在原来的内存空间中进行修改,还是说需要申请新的空间然后将修改后的变量。下面以整型和列表为例分别展示一下不可变模型和可变模型。

不可变类型

def immutable_variables():

# int

i = 0

ii = i

print("i == ii: {}".format(i == ii)) # True

print("i is ii: {}".format(i is ii)) # True

i += 1

print("i == ii: {}".format(i == ii)) # False

print("i is ii: {}".format(i is ii)) # False

print(i, ii) # 1 0

可变类型

def mutable_variables():

# list

l = [1]

ll = l

print("l == ll: {}".format(l == ll)) # True

print("l is ll: {}".format(l is ll)) # True

l.append(2)

print("l == ll: {}".format(l == ll)) # True

print("l is ll: {}".format(l is ll)) # True

print(l ll) # [1, 2] [1, 2]

从上面代码输出可以看到,对于不可变类型int,它自增的过程其实是将值计算之后重新申请一个内存空间,然后i变量指向新的内存空间,所以i和ii的值不一样了,指向的也不是同一个对象;对于可变类型list,它添加元素时候是直接在原来变量l指向的空间中进行添加,所以l不需要指向新的内存空间,因此造成的结果是ll也跟着变了,因此它们有相同的值且指向相同的对象。这就是可变/不可变类型的含义和影响。答案

python内置类型中不可变类型有str, int, float, boolean, tuple;可变类型有list, dict, set。拓展

关于这个问题在日常的应用中,一般是要小心把可变对象作为函数参数的情况,因为这样可能会使得在函数中修改参数时外部变量跟着被修改,如同上面代码修改l时ll也跟着修改的情况。

一起学习进步,欢迎关注点赞,一键三连~

更多python面试题,可关注公众号“进击的程序人”获取~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值