1.基本概念
1.1 对象
python中,一切皆对象 。每个对象都由标识(ID)、类型(type)、及值(value)组成。
我们定义一个变量Name,值为“JUEJING”
id(Name)函数查到Name的ID为2729105983472,这给就是对象“JUEJING”的地址
1.2 引用
python中,变量成为:对象的引用。因为,变量存储的就是对象的地址。
变量通过地址来引用了“对象”
变量位于:栈内存
对象位于:堆内存
重点:
Python是动态类型语言
变量不需要显式声明类型,根据变量引用的对象,python解释器自动获取数据类型
Python是强类型语言
每个对象都要数据类型,只支持该类型支持的操作
举个栗子:
1.3 栈内存和堆内存
2.字符串的内存分布
2.1 声明字符的内存分布
给一个变量赋值字符串,赋值之前先会去内存中的 堆内存 查询要赋值的字符串是否已经存在
如果存在的话直接将该变量指向字符串的内存地址
如果不存在的话,在堆内存直接创建新的字符串并将内存地址传给变量
# 定义Name变量
Name = "JUEJING"
# 再定义Myname变量也为JUEJING
MyName = "JUEJING"
# 打印两个变量,存储是同一个数据
print(Name,MyName)
print(id(Name),id(MyName))
2.2 不可变数据类型内存分布
Python标准语法中,不支持字符串直接修改内部数据
# 定义Name变量
Name = "JUEJING"
# 修改Name变量
#Name = "Tome"
# 修改Name之后,Name会被引用到“Tom”新的对象里
print(Name)
print(id(Name))
前后两次结果打印
————---------
JUEJING
4545145648
-------------
修改Name结果打印
-------------
Tome
4545145712
2.3 拼接字符串内存分布
字符串直接通过引号声明赋值,会在静态区分配内存创建数据
字符串通过拼接运算进行赋值,会在堆内存中完成运算处理结果的内存分配
# 定义h1,h2,h3,h4变量
h1 = "hello" #4545145776
h2 = "JUEJING" # 4545145904
h3 = "helloJUEJING"
h4 = h1+h2
print(id(h3)) # 4545146160
print(id(h4)) # 4545146032
总结
python字符串内存分配情况,最核心的部分是栈内存和堆内存理解,后续会再次有更深入的学习
好啦,以上是关于python字符串的内存原理讲解,欢迎大佬们指正
我是学习python小白,盆友圈的小可爱,下期见~