Python初学笔记之可变类型、不可变类型
2024-09-06 23:14:09
python中
可变类型:
- 列表 list
- 字典 dict
不可变类型:
- 数字型:int、float、complex、bool、long
- 字符型 str
- 元组 tuple
id(i):通过id查看变量的内存地址
引用
在Python中,变量也称为:对象的引用。变量存储的就是对象的地址。
变量位于:栈内存
对象位于:堆内存
Python是动态类型语言
变量不需要显式声明类型。根据变量引用的对象,Python解释器自动确定数据类型。
Python是强类型语言
每个对象都有数据类型,只支持该类型支持的操作。
下面通过代码来比较一下区别。定义变量之后打印出对应的内存地址。
i = 2
print(id(i)) # id:140713329648304 j = 2
k = 2
print(id(j)) # id:140713329648304
print(id(k)) # id:140713329648304 i = 3
print(id(i)) # id:140713329648336
我们发现,当创建 i=2,j=2,k=2时,他们的内存地址都是相同的。
它们内存的分配其实是如图的:
当我给i赋新的值3的时候,其实是给了i一个新的内存地址,这个地址的值对应堆内存中一个新的对象,
可见,即时现在i的值变等于3,原来的对象还是存在的,i的改变的并不是因为对象的值改变了,而是i引用了一个新的对象,因此我们说int是不可变类型。
a = [1, 2, 3]
print(id(a)) # id:2479232279176 b = [1, 2, 3]
print(id(b)) # id:2479232279240 a.append(88)
print(id(a)) # id:2479232279176
可变类型:在使用append方法后,变量的地址没有改变,它修改的是堆内存中对应id地址上的值。
当然,再新建一个对象赋值的时候,即使值是一样的,它一样会改变变量的地址指向。
最新文章
- Redis 学习笔记(C#)
- GDI+绘制文本
- 凸包(hd1392)
- SpringMVC存取Session的两种方法
- linux 之 getopt_long()
- 我们编写 React 组件的最佳实践
- time 命令
- 用交叉验证改善模型的预测表现-着重k重交叉验证
- Ubungu 18.04安装MySQL 5.7.24
- rpmbuild 源码打包clickhouse,附带打好的rpm包下载地址
- 【ASP.NET】ASP.NET如何发布Web项目
- java的PDF纵横向打印
- PHPCMS增加SEO字段调用
- ctf经典好题复习
- numpy中min函数
- win764位英文版系统unicode编码问题
- 基于Ajax的文件上传使用FileInput插件(使用谷歌翻译作者的原文,大致意思是对的,自己把握)
- “Code First Migrations ”工具【转】
- 多图片上传(base64方式传至后台)
- BZOJ4651 NOI2016网格(割点)
热门文章
- 【LeetCode】116. 填充每个节点的下一个右侧节点指针 Populating Next Right Pointers in Each Node 解题报告(Python)
- griffin环境搭建及功能测试
- 由于ios由UIWebView换成了WKWebview内核后导致webview请求接口文件上传,后台接收不到文件
- 应用TYPE-C外围电源管理IC IM2605
- 详解nohup /dev/null 2>;&;1 含义的使用
- linux 三剑客(持续更新)排版后续再说,边学边记笔记
- 安装Cacti-plugin
- Static 静态+this
- MongoDB之几种情况下的索引选择策略
- PHP靶场-bWAPP环境搭建