变量在静态与动态类型语言中的区别

反思:: 静态类型语言中变量是对象的标签,动态类型语言中变量是有类型的内存盒子

视频链接:3、Introduction to linked list_哔哩哔哩_bilibili

问题与思考

听他讲定义变量分配内存时突然有了一个疑惑和猜想。疑惑是python为什么叫做动态类型语言?猜想是因为python定义变量时分配的内存大小根据数据对象动态分配,所以叫做动态类型语言。

视频中讲的应该是静态类型语言的定义变量分配内存顺序。先定义整数变量int x,然后内存管理器找到空闲的4个字节的内存空间分配给这个变量,然后我们才可以给变量x赋值。但python中不用定义变量,这代表内存管理器不是预先找一个空闲空间的数据对象被放进来。而是数据对象先进来,根据数据的类型来决定被分配空间的大小。

所以动态类型语言和静态类型语言的一个区别点是:决定存放数据对象的大小时,前者由拿到数据后感知到的数据类型决定,而后者由定义变量时指定的数据类型决定。

思考与总结

我一直在用python,但之前一直没分清动态类型语言和静态类型语言,今天看了这个视频突然想明白了二者的一个区别。

之前我的一个反思是:动态类型语言(例如python)中变量相当于一个"写了内存地址的标签"。这里更新一下,更新为"数据对象的标签"。与之相对的静态类型语言中的变量是"有类型约束的内存盒子"。前者可以贴到不同大小不同位置的盒子/数据对象上(动态的),而后者本身就是个盒子,这个盒子的大小和位置在定义变量时就固定好了(静态的)。

这里记录一下deepseek给到的更全面的总结,虽然我对里面的元数据开销和运行开销还不太理解,但先记录下。

特性 Python变量(动态类型) C变量(静态类型)
本质 对象的标签/引用 有类型的内存盒子
内存分配 运行时根据对象动态分配 编译时固定大小分配
类型绑定 运行时动态绑定 编译时静态绑定
类型可变 可以指向不同类型对象 永远固定类型
内存开销 每个对象有元数据开销 只有原始数据大小
性能 间接访问,有运行时开销 直接内存访问,高效
相关推荐
LaughingZhu9 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
moshi_610 小时前
“瀑布流“ 滚动网页采集工具
经验分享·网络爬虫·数据采集·网页抓取·瀑布流页面采集
心中有国也有家10 小时前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
绝知此事10 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
LuminousCPP12 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
AI算法沐枫12 小时前
深度学习python代码处理科研测序数据
数据结构·人工智能·python·深度学习·决策树·机器学习·线性回归
一只机电自动化菜鸟13 小时前
一建机电备考笔记(40) 建筑机电施工—排水管道施工(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
m0_6294947314 小时前
LeetCode 热题 100-----26.环形链表 II
数据结构·算法·leetcode·链表
壹号用户14 小时前
用队列实现栈
数据结构·算法
欧米欧16 小时前
C++进阶数据结构之搜索二叉树
开发语言·数据结构·c++