[Python学习日记-14] Python中基础语法的补充(变量增删改的过程、垃圾回收机制、变量指向关系、身份运算和None)

[Python学习日记-14] Python中基础语法的补充

变量增删改的过程

变量的指向关系

垃圾回收机制

身份运算和None

三元运算

变量增删改的过程

一、增

        现在我们假设要创建一个变量名为 name 并且我们要赋它一个值“Jove”,那我们很自然会想到下面的代码

name = "Jove"
print(id(name))

        执行这行代码后 Python 就会在内存当中开辟一个空间用于储存这个变量和这个变量值,当然开辟出来的内存空间都会有一个内存地址,有点类似于图书馆的书本编号,这样可以极大地方便我们后面对变量的调用与变量之间的指向

内存地址

        而我们在创建的过程中其实就已经自动的把变量 name 和“Jove”的内存地址进行了指向,当我们在程序中调用 name 时将会先找到 变量名为 name 的变量,然后根据该变量指向的内存地址找到“Jove”,如下图所示

二、删

        当使用 del 来删除变量时,其实并不会删除变量所指向内存空间中的内容的,而是先断开该变量指向内存地址的链接,然后再删除变量,换句话说就是只把门口拆了,不让程序进行访问,代码如下

del name2
print(id(name2))    # 由于不存在了,所以会报错

        如下图所示,可以看出在 del 了 name 变量后当我们重新指向同样的内容时,Python 会指向回同样的内存地址,可以看出只是访问路径没了,但是东西依然是在的,如果这个访问路径一直没有,编译器中的垃圾回收机制将会将该内存空间回收

三、改

        很多时候我们都会需要修改变量,那么 Python 是如何执行的呢,我们执行下面的代码来修改变量 name 的值

name = "Kerry"

        在我们理解的修改里面是把原来的删除,然后填入新的值,其实 Python 并不会这样处理,而是会直接开辟一个新的内存空间用来存“Kerry”,之后再断开原来指向“Jove”的链接,最后把变量 name 指向“Kerry”所在的内存地址,而原来的“Jove”在没有变量指向的情况下将会由 Python 中的垃圾回收机制进行自动回收

变量的指向关系

        在程序开发的过程中很多时候我们会用到变量给变量赋值的这种操作,就像下面代码那般操作

name1 = "Jove"
name2 = name1
print(id(name1),id(name2))

        我们通常会认为 name2 ——> name1 ——> “Jove”的内存地址,那 Python 是这样操作的吗?那我们只要修改 name1 看看 name2 的指向是否有改变就知道了

name1 = "Kerry"
print(id(name1))

        我们会发现 name2 并没有跟随 name1 的改变而改变,这就说明了并不是我们刚开始所想的,而是 name2 是直接指向“Jove”的内存地址的

        而当改变 name1 的内容时就会断开一开始和“Jove”的链接,然后指向新创建的“Kerry”的内存地址

垃圾回收机制

        Python 中的解释器有自动垃圾回收机制,自动隔一段时间把没有跟变量名关联的内存数据回收。该机制主要通过引用计数和循环垃圾收集来实现。回收时间不到1秒,并且可以通过调整解析器的参数来修改这一回收时间。

        引用计数是最基本的垃圾回收机制。每个对象都有一个引用计数,当一个对象被引用时,其引用计数加1;当一个对象不再被引用时,其引用计数减1。当一个对象的引用计数变为0时,Python 认为该对象不再被使用,便会将其占用的内存回收。

        循环垃圾收集是一种辅助的垃圾回收机制。它会检测并回收那些引用计数不为0,但已经无法被访问到的对象。Python 中的循环垃圾收集采用了标记 - 清除算法。它从一组根对象开始,递归遍历所有可达对象,并对可达对象进行标记。然后,未被标记的对象即被认为是不可达的对象,会被回收。

        Python 还有其他一些垃圾回收机制,如分代回收和引用追踪。分代回收是一种根据对象的存活时间将内存分为不同代的垃圾回收机制。引用追踪是一种追踪对象之间相互引用关系的垃圾回收机制。

        总的来说,Python 的垃圾回收机制通过引用计数和循环垃圾收集来自动管理和回收内存。这种机制使得开发者可以专注于业务逻辑,而不用过多关注内存管理的细节。

身份运算和None

一、身份运算

        Python 中有很多种数据类型,查看一个数据的类型的方法是 type()

name = "Jove"
age = 1
print(name,type(name),type(age))

         而判断一个数据类型是不是 str 、int 等数据类型,可以用身份运算符 is

运算符描述实例
isis 是判断两个标识符是不是引用自一个对象x is y,类似 id(x) == id(y),如果引用的是同一个对象返回结果 True,否则返回 False
is notis not 是判断两个标识符是不是引用自不同对象x is not y,类似 id(a) != id(b),如果引用的不是同一个对象返回结果 True,否则返回 False
name = "Jove"
print(type(name) is str)
print(type(name) is not int)

 

二、None

        None 在 Python 中代表的意思就是空值(Empty),简单来说就是什么都没有。这个 None 看似在程序当中并没有什么作用,其实并非如此,在变量初始化时是非常有用的,例如游戏创建角色时需要玩家输入名字、年龄、体重、身高,那程序是提前写好的,肯定是需要一个变量来存储玩家输入的数据的,但是在变量创建时如果没有赋值则会报错,这个时候我们就需要赋一个 None 了。换一个思路也可以把 None 当作是一个变量值的占位符,下面我们看一段简单的代码

name = None    # 后续需要用户输入
age = None
weight = None
height = Nonename = input()    # 用户输入if name is None:    # 如果用户没有输入直接回车就进行提示print("你还没有起名字")

        从上面的代码可以看出,其实 None 主要还是和身份运算结合使用,当然例子还有很多,这里就不一一列举了。在判断里面 name is None 和 name == None 实现的效果是一样的,只不过使用 == 来判断不符合 Python 的规范,我们学习一门语言最主要就是要遵守它的规范,这样才能真正学成一门编程语言。

 

三元运算

         有这么一个场景有 a = 10,b = 5 而 c 的值若 a 大于15则等于 a 否则等于 b,那么我们使用代码来实现一下

a = 10
b = 5if a > 15:c = a
else:c = b

        常规的判断代码需要4行来实现,而三元运算只需要1行就能实现这一判断和赋值

a = 10
b = 5c = a if a > 15 else b    # 先读 if a > 15 条件成立执行左边的 c = a,不成立则执行右边

 

         三元运算一眼看下来是挺难读懂的,这是因为它的读法并不是顺序的看,而是跳跃地看的

c = 值1 if 条件A else 值2

如果条件A成立就取左边的 值1,否则取 值2 

        值得注意的是三元运算只能有一个 if ... else ... 并不能加 else if 进行多次判断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421137.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python本地搭建http.server文件共享服务并实现公网环境远程访问——“cpolar内网穿透”

前言 本文主要介绍如何在Windows系统电脑上使用python这样的简单程序语言,在自己的电脑上搭建一个共享文件服务器,并通过cpolar创建的公网地址,打造一个可以随时随地远程访问的私人云盘。 数据共享作为和连接作为互联网的基础应用&#xff…

011. Oracle-约束

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

【Web】XGCTF 西瓜杯 超详细题解

目录 CodeInject tpdoor easy_polluted Ezzz_php CodeInject eval里打代码注入 11);system("tac /0*");// tpdoor 可以传参isCache给../../config/route.php写入$config[request_cache_key] 打的是CheckRequestCache中间件解析的漏洞 think\middleware\Ch…

得物APP助力释放首发经济新活力,解锁年轻潮流密码

在消费升级与高质量发展的时代背景下,我国首发经济正以前所未有的活力蓬勃发展,成为推动市场繁荣、满足个性化消费需求的重要力量。首发,即产品首次在市场亮相,往往代表着最新的设计理念、最尖端的科技应用以及最前沿的潮流趋势。…

一文读懂数字化生态平台的多元功能!

在这个数字化飞速发展的时代,有个话题不得不提 —— 数字化生态平台的多元功能。 ​ 资源整合:凝聚各方力量 在当下,数字化生态平台就像一个大管家,能把分散在不同地方、不同主体的各类资源高效整合起来。商业领域里,…

STM32-HAL库开发快速入门

注:本文主要记录一下STM32CubeMX软件的使用流程,记录内容以STM32外设(中断、I2C、USART、SPI等配置)在STM32CubeMX中的设置为主,对驱动代码编写不做记录,所以阅读本文最好有标准库开发经验。除第2节外,使用的都是韦东山…

JAVA智能管理高效运营自营商城系统

智能管理,高效运营 —— 自营商城系统的魅力揭秘🚀 📈 开篇:告别繁琐,拥抱智能管理 你还在为商城运营的繁琐流程头疼吗?🤯 还在为数据分析的复杂性而烦恼吗?🤔 那就让我…

IPv6理论基础

IPV6 地址介绍 地址标识方法 格式 : XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX,128bit,8个16位,16进制 X表示十六进制的一个字符,可以是0 - 9,A -F 字母大小写不敏感,最终设备上显示均为大写 一个地址由8个字段构成…

学习threejs,创建立方体,并执行旋转动画

文章目录 一、前言二、代码示例三、总结 一、前言 本文基于threejs&#xff0c;实现立方体的创建&#xff0c;并加入立方体旋转动画 二、代码示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>l…

【动态规划】【完全背包】力扣322. 零钱兑换

给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的。 示…

【ACM出版,录用检索快】2024年第四届工商管理与数据科学国际学术会议 (BADS 2024,10月25-27)

2024年第四届工商管理与数据科学国际学术会议(BADS 2024)将于2024年10月25-27日在中国重庆召开&#xff0c;大会由喀什大学支持。 在当今全球化与数字化迅速发展的时代&#xff0c;工商管理与数据科学作为推动经济增长和技术进步的重要力量&#xff0c;正以前所未有的速度交叉融…

使用肘部法则确定K-Means中的k值

一 肘部法则 在K-means算法中&#xff0c;对于确定K&#xff08;簇的数目&#xff09;&#xff0c;我们经常使用肘部法则。 肘部法则是一种用于确定在k均值聚类算法中使用的质心数&#xff08;k&#xff09;的技术。 在这种方法中&#xff0c;为了确定k值&#xff0c;我们连续…

二十三种模式之原型模式(类比制作陶器更好理解一些)

1. 设计模式的分类 创建型模式(五种)&#xff1a;工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式。 结构型模式(七种)&#xff1a;适配器模式、代理模式、装饰器模式、桥接模式、外观模式、享元模式、组合模式。 行为型模式(十一种)&#xff1a;状态模式、模板方…

刚开始学精益六西格玛管理方法?这份指南建议收藏

精益六西格玛管理方法&#xff0c;作为两大管理哲学的完美结合&#xff0c;正逐渐成为众多企业转型升级的利器。对于刚开始接触这一领域的你来说&#xff0c;掌握精益六西格玛管理的精髓并有效应用于实践中&#xff0c;无疑是一项既具挑战性又极具价值的任务。本文&#xff0c;…

应用连接错误,初始化mysql数据库恢复---惜分飞

有人在部署一个新网站的时候,写错了配置信息,直接导致原有数据库被清掉,并创建了新库和写入了数据(其实本质就是drop table恢复) 登录操作系统查看,发现数据库文件在根分区,创建了新库,写入了数据之外,还有几个G的binlog.全部恢复不太可能,最后客户决定需要恢复的2个核心表数…

.NET 一款在线解密Web.config的脚本

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

官网下载easyx压缩包,如何在devc++配置easyx

视频教程 官网下载easyx压缩包&#xff0c;如何在devc配置easyx EasyX Graphics Library for C 安装指南 1. 访问官网 官网 2. 下载 EasyX 在官网上找到下载区域&#xff0c;点击下载按钮以获取 EasyX 安装包。 3. 访问更多下载选项 点击页面上的“more”链接&#xff0…

Django日志

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) Django 5框…

uniapp 微信小程序自定义tabbar层级低于canvas解决方案

示例代码&#xff1a; <template><cover-view class"tab"><cover-view class"navView" tap"switc(/pages/index/index)"><cover-image :src"tabname index?/static/tabbar/overide-sel.png:/static/tabbar/overide…

Vscode python无法转到函数定义

今天上午换了电脑&#xff0c;使用Vscode发现找不到对应的函数定义了。 使用了网上的全部教程。一点用没有。重启电脑&#xff0c;重启Vscode也没有作用。最后通过重装vscode&#xff0c;解决问题。&#xff08;也不知道Vscode什么毛病&#xff09; 重点语句&#xff1a; 去官网…