千家信息网

python的内存分配机制是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇"python的内存分配机制是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"
千家信息网最后更新 2026年11月01日python的内存分配机制是什么

这篇"python的内存分配机制是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"python的内存分配机制是什么"文章吧。

开始

作为一个实例,让我们创建四个变量并为其赋值:

variable1 = 1variable2 = "abc"variable3 = (1,2)variable4 = ['a',1]#打印他们的idsprint('Variable1: ', id(variable1))print('Variable2: ', id(variable2))print('Variable3: ', id(variable3))print('Variable4: ', id(variable4))

打印结果如下所示:

变量1:1747938368
变量2:152386423976
变量3:152382712136
变量4:152382633160

每个变量都被分配了一个新的内存地址(以整数形式表示)。第一个假设是,每当我们使用" ="给变量赋值时,Python都会创建一个新的内存地址来存储变量。这是100%正确的吗?当然不是!

我将创建两个新变量(5和6)并使用现有变量的值给它们赋值。

variable5 = variable1variable6 = variable4print('Variable1: ', id(variable1))print('Variable4: ', id(variable4))print('Variable5: ', id(variable5))print('Variable6: ', id(variable6))

Python打印结果:

变量1:1747938368
变量4:819035469000
变量5:1747938368
变量6:819035469000

你注意到,Python并未为这两个变量创建新的内存地址吗?这次,它只是把两个新变量都指向了现有变量相同的存储位置。

现在让我们为变量1设置一个新值。注意:整数是不可变数据类型。

print('Variable1: ', id(variable1))variable1 = 2print('Variable1: ', id(variable1))

这将打印:

Variable1: 1747938368
Variable1: 1747938400

这意味着每当我们使用=并将新值给现有变量赋值时,就会在内部创建一个新的内存地址来存储该变量。让我们看看它是否成立!

当值是可变数据类型时会发生什么?variable6是一个列表,让我们在列表结尾append一个值并打印其内存地址:

print('Variable6:',id(variable6))variable6.append('new')print('Variable6:',id(variable6))

请注意,变量的内存地址保持不变,因为它是可变数据类型,我们仅更新了其元素。

Variable6:678181106888
Variable6:678181106888

让我们创建一个函数并将一个变量传递给它。如果我们在函数内部设置变量的值,它会发生什么?让我们评估一下。

def update_variable(variable_to_update):    print(id(variable_to_update))update_variable(variable6)print('Variable6: ', id(variable6))

请注意,variable_to_update的ID指向变量6的ID。

这意味着如果我们在函数中更新variable_to_update且variable_to_update是可变数据类型,那么variable6的值将更新。我们看一个具体例子:

variable6 = ['new']print('Variable6: ', variable6)def update_variable(variable_to_update):    variable_to_update.append('inside')update_variable(variable6)print('Variable6: ', variable6)

这将打印:

Variable6:['new']
Variable6:['new','inside']

它向我们展示了如何在函数中的更新一个可变的变量,你可以看到函数类和函数外的可变变量都具有相同的ID。

如果我们在函数内给变量赋一个新值(而不是更新),无论它是不可变的还是可变的数据类型,那么一旦退出函数,更改将丢失:

print('Variable6: ', variable6)def update_variable(variable_to_update):    print(id(variable_to_update))    variable_to_update = ['inside']update_variable(variable6)print('Variable6: ', variable6)

Variable6:['new']
344115201992
Variable6:['new']

现在是一个有趣的场景:Python并不总是为所有新变量创建一个新的内存地址。

最后,如果我们为两个不同的变量分配一个字符串值,例如" a",该怎么办?它会创建两个内存地址吗?

variable_nine ="a"variable_ten ="a"print('Variable9:',id(variable_nine))print('Variable10:',id(variable_ten))

注意,这两个变量具有相同的内存位置:

Variable9:792473698064
Variable10:792473698064

如果我们创建两个不同的变量并为其分配一个长字符串值,该怎么办:

variable_nine = "a" * 21variable_ten = "a" * 21print('Variable9: ', id(variable_nine))print('Variable10: ', id(variable_ten))

这次Python为两个变量创建了两个不同内存位置:

Variable9:541949933872
Variable10:541949933944

为什么? 这是因为Python启动时会创建一个内部值缓存,这样做是为了提供更快的结果。Python会为少量整数(如-5到256之间)和较小的字符串值分配了少量的内存地址。这就是我们示例中的短字符串都具有相同ID的原因,而长字符串的ID则不同。

== vs是

有时我们想检查两个对象是否相等。

  • 如果我们使用==,它将检查两个参数是否包含相同的数据

  • 如果我们使用is,那么Python将检查两个对象是否引用相同的对象,此时两个对象的id必须相同

var1 = "a" * 30 var2 = "a" * 30 print('var1:',id(var1))#318966315648 print('var2:',id(var2))#168966317364 print('==:', var1 == var2)#返回True print('is:',var1 is var2)#返回False

以上就是关于"python的内存分配机制是什么"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

变量 内存 两个 地址 函数 可变 分配 相同 数据 内容 字符 字符串 类型 更新 不同 对象 机制 会创 位置 整数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技名片 喔噻互联网科技有限公司 哈尔滨大商圈互联网科技有限公司 广州大一互联网络科技有限公司 科技企业和互联网企业 互联网科技的英文 世界互联网领先科技成果 安徽鑫晟辉互联网科技 云电互联网科技 博兴的互联网电子科技公司 广州慧亚互联网科技怎么样 承德科技产业互联网发展 现代互联网科技股 栖莱科技互联网股份有限公司 崇明区互联网教育科技售后服务 广州市恰铎互联网科技有限公司 消费医药和互联网科技 伊宁互联网科技做什么的 上海钢联属于互联网科技股吗 科技互联网企业在行动 互联网络科技有限公司 互联网的科技创新 上海致骋互联网科技 友谊互联网络科技 互联网科技类展会 互联网公司会议桌创意科技软装饰 济南华为互联网科技产业总部基地 科技互联网的核心竞争力 北京天晋互联网科技有限公司 互联网科技创业计划的风险分析
0