Python初学笔记之可变类型、不可变类型

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

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

原文地址:https://www.cnblogs.com/jszfy/p/11117744.html