您现在的位置是:亿华云 > IT科技类资讯

Python 面试高频问题:可变数据类型和不可变数据类型的区别

亿华云2025-10-04 01:01:47【IT科技类资讯】9人已围观

简介www.ydisp.cn/oss/202207/13/71a7895321c78aa3ae3997ac9f4fc3527a9929.png" style="visibility: visible; w

www.ydisp.cn/oss/202207/13/71a7895321c78aa3ae3997ac9f4fc3527a9929.png" style="visibility: visible; width: 454px; height: 301px;" data-type="inline">

Python可变数据类型和不可变数据类型是面试一个基础而且重要的考点。简单地说:这里的高频可变和不可变是指当变量改变的时候,数据的问题地址是否会改变!

可变数据类型:如果改变了变量的可变可变值,相当于是数据数据新建了一个对象(即地址会被改变)。

可变数据类型:变量的类型类型值发生变化,但是面试对象的地址不会改变。

不可变数据类型:元组,高频字符串,问题数值。可变可变

可变数据类型:字典,数据数据列表,类型类型集合。

引用

在讲可变数据类型和不可变数据类型之前我们要讲一下引用的面试概念。python变量保存的高频是对象的服务器托管引用,这个引用指向堆内存里的问题对象,在堆中分配的对象分为两类,一类是可变对象,一类是不可变对象。例如:s1="abc"。

其实变量s1 就是对象 abc的引用,s1指向了存储abc的内存地址,如果想看s1的地址值,可以使用函数id,id会把地址值转换成十进制。使用print(id(s1))即可,如下图所示:

不可变数据类型

我们以字符串举例,直接上代码:

s1="abc"

print(id(s1))

s1="xyz"

print(id(s1))

输出:

140712532603136

140712532603168

从输出结果可见改变字符串类型变量的值,地址也会随之变化。

我们接下来看这个实例,也是面试笔试中经常出的题目。云服务器

#在上面代码基础上,编写如下代码:

s2=s1

print(id(s1))

print(id(s2))

输出:

743316570224

743316570224

可以看到s2=s1 实际上是s2 和s1都指向了同一个地址。

我们继续,改变s2的值。

s2="def"

print(id(s1))

print(s1)

print(id(s2))

print(s2)

输出:

879864758384

xyz

879889887984

def

看到这里,我们就能够理解为什么改变了s2 的值并没有影响s1的值。因为s1 和s2指向了不同的地址,所以s1的值并没有被改变!

可变数据类型

我们以列表举例:

l = [1, 2, 3]

print(id(l))

l.remove(1) # 删除元素

print(id(l))

l.append(4) # 增加元素

print(id(l))

l[1] = 8 # 修改元素

print(id(l))

输出:

405927907912

405927907912

405927907912

405927907912

可以看到对列表进行增删改操作,列表的地址都没有变化,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化。

再看下面这个实例,与前面的字符串赋值实例类似。

l1=[a,b,c]

l2=l1

print(id(l1))

print(id(l2))

l2.append(d)

print("网站模板

很赞哦!(662)