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地址上的值。

当然,再新建一个对象赋值的时候,即使值是一样的,它一样会改变变量的地址指向。

最新文章

  1. Redis 学习笔记(C#)
  2. GDI+绘制文本
  3. 凸包(hd1392)
  4. SpringMVC存取Session的两种方法
  5. linux 之 getopt_long()
  6. 我们编写 React 组件的最佳实践
  7. time 命令
  8. 用交叉验证改善模型的预测表现-着重k重交叉验证
  9. Ubungu 18.04安装MySQL 5.7.24
  10. rpmbuild 源码打包clickhouse,附带打好的rpm包下载地址
  11. 【ASP.NET】ASP.NET如何发布Web项目
  12. java的PDF纵横向打印
  13. PHPCMS增加SEO字段调用
  14. ctf经典好题复习
  15. numpy中min函数
  16. win764位英文版系统unicode编码问题
  17. 基于Ajax的文件上传使用FileInput插件(使用谷歌翻译作者的原文,大致意思是对的,自己把握)
  18. “Code First Migrations ”工具【转】
  19. 多图片上传(base64方式传至后台)
  20. BZOJ4651 NOI2016网格(割点)

热门文章

  1. 【LeetCode】116. 填充每个节点的下一个右侧节点指针 Populating Next Right Pointers in Each Node 解题报告(Python)
  2. griffin环境搭建及功能测试
  3. 由于ios由UIWebView换成了WKWebview内核后导致webview请求接口文件上传,后台接收不到文件
  4. 应用TYPE-C外围电源管理IC IM2605
  5. 详解nohup /dev/null 2>&1 含义的使用
  6. linux 三剑客(持续更新)排版后续再说,边学边记笔记
  7. 安装Cacti-plugin
  8. Static 静态+this
  9. MongoDB之几种情况下的索引选择策略
  10. PHP靶场-bWAPP环境搭建