当前位置: 首页 > article >正文

ai学习--python部分-1.变量名及命名空间的存储

初学代码时总有一个问题困扰我:a = 10       # a指向地址0x1234(存储10)
变量a的值10存储在0x1234,那么变量a需要存储吗?a又存储在什么地址呢

目录

1. ​​命名空间的本质​​

2. ​​命名空间的内存占用​​

3. ​​变量名 vs 变量值的存储对比​​

4. ​​静态语言(如C)的对比​​

5. ​​为什么需要命名空间?​​

6. ​​总结​​

7.小测试


1. ​​命名空间的本质​

  • ​动态语言(如Python)​​:
    变量名与值的绑定关系通过 ​​命名空间字典​​(如 globals())维护,但这个字典本身是一个 ​​运行时动态创建的对象​​,存储在内存中。
    • ​变量名 "a"​:作为字典的 ​​键(Key)​​(字符串对象)存储。
    • ​变量值 10​:作为字典的 ​​值(Value)​​(指向实际对象的引用)。
# 伪代码展示Python内部实现(简化版)
global_namespace = {"a": 0x1234,  # 键是字符串"a",值是对象10的地址"b": 0x5678   # 其他变量...
}

2. ​​命名空间的内存占用​

  • ​存储位置​​:
    命名空间字典本身是一个 ​​堆内存中的对象​​,有独立的内存地址(可通过 id(globals()) 查看)。
    print(hex(id(globals())))  # 输出如0x55a1b2d3e0(命名空间字典的地址)
  • ​内存消耗​​:
    • 每个键(变量名)作为字符串对象存储,占用内存。
    • 每个值(变量引用)是指针(通常8字节,64位系统)。
    • 字典的哈希表结构还有额外开销(如哈希桶、冲突处理)。

3. ​​变量名 vs 变量值的存储对比​

​存储内容​​存储位置​​示例(Python)​
​变量名 "a"命名空间字典的键(堆内存)globals()["a"] 中的 "a"
​变量值 10独立对象(堆内存)id(a) 返回的地址(如 0x1234
​命名空间字典​堆内存中的对象id(globals()) 返回的地址(如 0x55a1b2d3e0

4. ​​静态语言(如C)的对比​

  • ​无运行时命名空间​​:
    变量名在编译后直接替换为固定内存地址,不占用运行时内存。
    int a = 10;  // 编译后,所有对a的访问变为对地址0x1000的操作
  • ​无字典开销​​:
    变量名仅在源码和符号表中存在,编译后的二进制文件中无痕迹。

5. ​​为什么需要命名空间?​

  • ​动态语言的灵活性​​:
    Python 允许运行时动态添加/删除变量(如 globals()["x"] = 100),必须维护变量名与值的映射关系。
  • ​作用域管理​​:
    每个函数有独立的 locals() 字典,实现变量隔离。

6. ​​总结​

  • ​变量名存储​​:作为字符串键存在于命名空间字典中(堆内存)。
  • ​命名空间存储​​:字典对象本身占用内存(地址可通过 id(globals()) 获取)。
  • ​核心区别​​:
    • ​静态语言​​:变量名是编译期概念,无运行时存储。
    • ​动态语言​​:变量名是运行时对象,需内存存储以支持动态特性。

7.小测试

  • 多个变量的值相同的情况下,内存空间里是如何存储的?(答案在下期)
  • 举例:a=b=c=10

这种设计是 Python 等动态语言灵活性的代价——牺牲部分内存和速度换取开发便捷性。

元宝老师提供标准化答案,解释权归迪普斯克老师,侵删~

相关文章:

ai学习--python部分-1.变量名及命名空间的存储

初学代码时总有一个问题困扰我:a 10 # a指向地址0x1234(存储10) 变量a的值10存储在0x1234,那么变量a需要存储吗?a又存储在什么地址呢 目录 1. ​​命名空间的本质​​ 2. ​​命名空间的内存占用​​ 3. ​​…...

Cadence学习笔记之---PCB过孔替换、封装更新,DRC检查和状态查看

目录 01 | 引 言 02 | 环境描述 03 | 过孔替换 04 | 封装更新 05 | PCB状态查看 06 | DRC检查 07 | 总 结 01 | 引 言 终于终于来到了Cadence学习笔记的尾声! 在上一篇文章中,讲述了如何布线、如何铺铜,以及布线、铺铜过程中比较重要…...

Java基础 Day21

一、Stream 流 思想&#xff1a;流水线式思想 1、获取流对象&#xff08;将数据放到流中&#xff09; &#xff08;1&#xff09;集合获取 Stream 流对象 使用Collection接口的默认方法 default Stream<E> stream() 获取当前集合对象的 Stream 流&#xff08;单列集…...

系统开发和运行知识

软件生存周期 软件生存周期包括可行性分析与项目开发计划、需求分析、概要设计、详细设计、编码和单元测试、综合测试及维护阶段。 1、可行性分析与项目开发计划 主要任务是确定软件的开发目标及可行性。该阶段应该给出问题定义、可行性分析和项目开发计划。 2、需求分析 需求…...

Elasticsearch 分片驱逐(Shard Exclusion)方式简析:`_name`、`_ip`、`_host`

在日常运维 Elasticsearch 集群过程中&#xff0c;常常需要将某个节点上的分片迁移出去&#xff0c;例如下线节点、腾出资源或进行维护操作。Elasticsearch 提供了简单直观的 shard exclusion 参数来实现这一目的&#xff0c;主要通过以下三个配置项&#xff1a; cluster.rout…...

【C++高级主题】异常处理(四):auto_ptr类

目录 一、auto_ptr 的诞生&#xff1a;为异常安全的内存分配而设计 1.1 传统内存管理的痛点 1.2 auto_ptr 的核心思想&#xff1a;RAII 与内存绑定 1.3 auto_ptr 的基本定义&#xff08;简化版&#xff09; 二、auto_ptr 的基本用法&#xff1a;将指针绑定到智能对象 2.1…...

STM32CubeMX配置使用通用定时器产生PWM

一、定时器PWM功能简介 定时器&#xff0c;顾名思义&#xff0c;就是定时的功能&#xff0c;定时器在单片机中算是除GPIO外最基本的外设。在ST中&#xff0c;定时器分为几种&#xff0c;基础定时器&#xff0c;通用定时器&#xff0c;高级定时器和低功耗定时器。其中定时器除了…...

WebSphere Application Server(WAS)8.5.5教程第十四讲:JPA

一、JPA 以下是对 JPA&#xff08;Java Persistence API&#xff09; 的深入详解&#xff0c;适用于具备一定 Java EE / Jakarta EE 背景的开发者&#xff0c;尤其是对数据持久化机制感兴趣的人员。 1、什么是 JPA&#xff1f; Java Persistence API&#xff08;JPA&#xf…...

Linux系统调用深度剖析

Linux系统调用深度剖析与实践案例 目录 Linux系统调用深度剖析与实践案例 一、Linux系统调用概述 二、进程管理相关系统调用 1. fork():进程克隆与多任务处理 2. exec系列:程序加载与替换 3. wait/waitpid:进程状态同步 三、文件操作相关系统调用 1. 文件描述符操作…...

动态规划-918.环形子数组的最大和-力扣(LeetCode)

一、题目解析 听着有点复杂&#xff0c;这里一图流。 将环形问题转化为线性问题。 二、算法原理 1.状态表示 2.状态转移方程 详细可以移步另一篇博客&#xff0c;53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 3.初始化 由于计算中需要用到f[i-1]和g[i-1]的值&…...

Docker 镜像标签(Tag)规范与要求

Docker 镜像标签(Tag)规范与要求 背景 目前主流云厂商&#xff0c;如阿里云、百度云和腾讯云&#xff0c;均提供租户使用的镜像仓库服务。 各个厂商要求可能不太一样&#xff0c;比如华为&#xff1a;https://doc.hcs.huawei.com/zh-cn/usermanual/swr/swr_faq_0017.html 样…...

STM32:Modbus通信协议核心解析:关键通信技术

知识点1【 Modbus通信】 1、Modbus的概述 Modbus是OSI模型第七层的应用层报文传输协议 协议&#xff1a;说明有组包和解包的过程 2、通信机制 Modelbus是一个请求/应答协议 通信机制&#xff1a;主机轮询&#xff0c;从机应答的机制。每个从设备有唯一的地址&#xff0c;主…...

线程封装与互斥

目录 线程互斥 进程线程间的互斥相关背景概念 互斥量mutex 互斥量的接口 初始化互斥量有两种方法&#xff1a; 销毁互斥量 互斥量加锁和解锁 改进售票系统 互斥量实现原理探究 互斥量的封装 线程互斥 进程线程间的互斥相关背景概念 临界资源&#xff1a;多线程执行流共…...

鸿蒙OSUniApp 开发实时天气查询应用 —— 鸿蒙生态下的跨端实践#三方框架 #Uniapp

使用 UniApp 开发实时天气查询应用 —— 鸿蒙生态下的跨端实践 在移动互联网时代&#xff0c;天气应用几乎是每个人手机中的"标配"。无论是出行、旅游还是日常生活&#xff0c;实时获取天气信息都极为重要。本文将以"实时天气查询应用"为例&#xff0c;详…...

第十一天 5G切片技术在车联网中的应用

前言 在自动驾驶汽车每天产生4TB数据的时代&#xff0c;传统的移动网络已难以满足车联网的海量连接需求。中国移动2023年实测数据显示&#xff0c;某智能网联汽车示范区在传统5G网络下&#xff0c;紧急制动指令的传输延迟高达65ms&#xff0c;而5G网络切片技术将这个数值降低到…...

Spring AI 系列之一个很棒的 Spring AI 功能——Advisors

1. 概述 由AI驱动的应用程序已成为我们的现实。我们正在广泛地实现各种RAG应用程序、提示API&#xff0c;并利用大型语言模型&#xff08;LLM&#xff09;创建项目。借助 Spring AI&#xff0c;我们可以更快速地完成这些任务。 在本文中&#xff0c;我们将介绍一个非常有价值…...

Vue3 + TypeScript + el-input 实现人民币金额的输入和显示

输入人民币金额的参数要求&#xff1a; 输入要求&#xff1a; 通过键盘&#xff0c;只允许输入负号、小数点、数字、退格键、删除键、方向左键、方向右键、Home键、End键、Tab键&#xff1b;负号只能在开头&#xff1b;只保留第一个小数点&#xff1b;替换全角输入的小数点&a…...

2.1 C++之条件语句

学习目标&#xff1a; 理解程序的分支逻辑&#xff08;根据不同条件执行不同代码&#xff09;。掌握 if-else 和 switch 语句的用法。能编写简单的条件判断程序&#xff08;如成绩评级、游戏选项等&#xff09;。 1 条件语句的基本概念 什么是条件语句&#xff1f; 程序在执…...

ZYNQ实战:可编程差分晶振Si570的配置与动态频率切换

为什么需要可编程差分晶振? 在现代FPGA和嵌入式系统中,高速串行通信(如GTP/GTX收发器)对参考时钟的精度和灵活性要求极高。例如,1G以太网需要125MHz时钟,SATA协议需120MHz,而DisplayPort则需135MHz。传统固定频率晶振无法满足多协议动态切换需求,而Si570凭借其10MHz~8…...

Linux `ls` 命令深度解析与高阶应用指南

Linux `ls` 命令深度解析与高阶应用指南 一、核心功能解析1. 基本作用2. 与类似命令对比二、选项系统详解1. 常用基础选项2. 进阶筛选选项三、高阶应用技巧1. 组合过滤查询2. 格式化输出控制3. 元数据深度分析四、企业级应用场景1. 存储空间监控2. 安全审计3. 自动化运维五、特…...

【MPC控制 - 从ACC到自动驾驶】5. 融会贯通:MPC在ACC中的优势总结与知识体系构建

【MPC控制 - 从ACC到自动驾驶】融会贯通&#xff1a;MPC在ACC中的优势总结与知识体系构建 在过去的四天里&#xff0c;我们一起经历了一段奇妙的旅程&#xff1a; Day 1: 我们认识了自适应巡航ACC这位“智能领航员”&#xff0c;并初见了模型预测控制MPC这位“深谋远虑的棋手…...

Day3 记忆内容:map set 高频操作

以下是 第三天 的详细学习内容&#xff0c;聚焦 map和set的高效应用&#xff0c;重点突破查找类题型和去重逻辑&#xff0c;助你提升代码效率&#xff01; &#x1f4da; Day3 记忆内容&#xff1a;map & set 高频操作 1. map 核心操作&#xff08;手写3遍&#xff09; /…...

初等数论--Garner‘s 算法

0. 介绍 主要通过混合积的表示来逐步求得同余方程的解。 对于同余方程 { x ≡ v 0 ( m o d m 0 ) x ≡ v 1 ( m o d m 1 ) ⋯ x ≡ v k − 1 ( m o d m k − 1 ) \begin{equation*} \begin{cases} x \equiv v_0 \quad (\ \bmod \ m_0)\\ x \equiv v_1 \quad (\ \bmod \ m_1)…...

NV211NV212美光科技颗粒NV219NV220

NV211NV212美光科技颗粒NV219NV220 技术架构解析&#xff1a;从颗粒到存储系统 近期美光科技发布的NV211、NV212、NV219、NV220系列固态颗粒&#xff0c;凭借其技术突破引发行业关注。这些颗粒基于176层QLC堆叠工艺&#xff0c;单Die容量预计在2026年可达1Tb&#xff0c;相当…...

SQL解析工具JSQLParser

目录 一、引言二、JSQLParser常见类2.1 Class Diagram2.2 Statement2.3 Expression2.4 Select2.5 Update2.6 Delete2.7 Insert2.8 PlainSelect2.9 SetOperationList2.10 ParenthesedSelect2.11 FromItem2.12 Table2.13 ParenthesedFromItem2.14 SelectItem2.15 BinaryExpressio…...

Wave Terminal + Cpolar:SSH远程访问的跨平台实战+内网穿透配置全解析

文章目录 前言1. Wave Terminal安装2. 简单使用演示3. 连接本地Linux服务器3.1 Ubuntu系统安装ssh服务3.2 远程ssh连接Ubuntu 4. 安装内网穿透工具4.1 创建公网地址4.2 使用公网地址远程ssh连接 5. 配置固定公网地址 前言 各位开发者朋友&#xff0c;今天为您介绍一款颠覆性操…...

html使用JS实现账号密码登录的简单案例

目录 案例需求 思路 错误案例及问题 修改思路 案例提供 所需要的组件 <input>标签&#xff0c;<button>标签&#xff0c;<script>标签 详情使用参考&#xff1a;HTML 教程 | 菜鸟教程 案例需求 编写一个程序&#xff0c;最多允许用户尝试登录 3 次。…...

sorted() 函数和sort()函数的区别

在Python中&#xff0c;sorted() 函数和列表的 sort() 方法都用于排序&#xff0c;但它们之间有一些关键的区别&#xff1a; 返回值&#xff1a; sorted()&#xff1a;返回一个新的列表&#xff0c;包含所有排序后的元素&#xff0c;原始列表不会被修改。sort()&#xff1a;对列…...

Solr搜索:比传统数据库强在哪?

Solr 是一个基于 Apache Lucene 的开源搜索平台&#xff0c;广泛用于全文检索和数据分析。与传统的关系型数据库查询相比&#xff0c;Solr 在某些方面具有明显的优势&#xff0c;特别是在处理大规模文本数据和复杂的搜索需求时。以下是 Solr 相对于传统数据库查询的主要优势&am…...

【数据集】基于ubESTARFM法的100m 地温LST数据集(澳大利亚)

目录 数据概述一、输入数据与处理二、融合算法1. ESTARFM(Enhanced STARFM)2. ubESTARFM(Unbiased ESTARFM)代码实现数据下载参考根据论文《Generating daily 100 m resolution land surface temperature estimates continentally using an unbiased spatiotemporal fusion…...