您现在的位置是:亿华云 > IT科技类资讯
Python 面试高频问题:可变数据类型和不可变数据类型的区别
亿华云2025-10-04 01:01:47【IT科技类资讯】9人已围观
简介www.ydisp.cn/oss/202207/13/71a7895321c78aa3ae3997ac9f4fc3527a9929.png" style="visibility: visible; w
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)
相关文章
- 付款完成后,您只需耐心等待,如果您注册成功,系统会提示您。这里需要注意的是,域名是一个即时产品,只有在最终付款成功时才能预订,注册成功后不能更改。
- 电脑的文件无法删除咋回事?你需要这款神兵利器
- 一行代码简化Python异常信息:错误清晰指出,排版简洁美观
- 3种神操作,教你查看 Java 字节码!
- 4、参加域名拍卖会
- AOE工程实践 银行卡OCR里的图像处理
- 现代编程语言哪家强?2020年,你或许应该了解这7门编程语言
- 2019年排名Top 100的Java类库——在分析了30073份源码之后得出的结论
- 域后缀首选.com,.net,然后是.cn。后缀选择不当,导致流量损失。域名是企业与互联网网址之间的链接,关键是企业在网络上存在的标志。因此,选择好域名是开展网上工作的首要重要条件。
- Python中如何实现参数化测试?