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

python的变量的引用与赋值的学习

 看代码:

a = 1  # 初始化变量a,赋值为1
b = a  # 变量b被赋值为变量a的值,此时b的值也为1
b = 2  # 变量b被重新赋值为2
print(a)  # 打印变量a的值

执行过程如下:

  1. a = 1:变量a被赋值为1。
  2. b = a:变量b被赋值为变量a的值,即1。
  3. b = 2:变量b被重新赋值为2,覆盖了之前a的值。
  4. print(a):打印变量a的值,此时a的值仍然是1,因为它没有被重新赋值。

再看:

a = [1]  # 初始化变量a,赋值为包含一个元素1的列表
b = a   # 变量b被赋值为变量a的引用,即指向相同的列表对象
b[0] = 2  # 通过变量b修改列表的第一个元素为2
print(a)  # 打印变量a引用的列表

执行过程如下:

  1. a = [1]:变量a被赋值为一个包含一个元素1的列表。
  2. b = a:变量b被赋值为变量a的引用,即它们指向相同的列表对象。
  3. b[0] = 2:通过变量b修改了列表的第一个元素为2。由于a和b引用的是同一个列表对象,因此a的内容也会被修改。
  4. print(a):打印变量a引用的列表,此时列表的第一个元素已经变成了2。

因此,最终的输出结果是:

[2]

这是因为列表是可变对象,当你通过一个引用修改了列表的内容时,所有指向该列表的引用都会反映出这些修改。

利用这个原理,可以灵活实现一些功能。比如,字典或者JSON数据,我们有时候需要修改字典的值,如果字典的结构层次很深,修改起来就很繁琐。如果直接将字典的值定义为变量,通过修改变量直接修改字典的值就会很方便。

字典的demo:

dict1 = {'person': {'name': {'tom': {'phone number': {'first number': '123456','second number': '234567'}},'jack': {'phone number': {'first number': '666666','second number': '888888'}}}}}
dict1['person']['name']['tom']['phone number']['first number'] = '999999'

在这个代码中,对字典的一个值的修改很不简洁。那么如果定义一个变量到字典的值呢?

dict1 = {'person': {'name': {'tom': {'phone number': {'first number': '123456','second number': '234567'}},'jack': {'phone number': {'first number': '666666','second number': '888888'}}}}}tom_num_1 = dict1['person']['name']['tom']['phone number']['first number']
tom_num_1 = '999999'print(dict1)   # 输出:{'person': {'name': {'tom': {'phone number': {'first number': '123456', 'second number': '234567'}}, 'jack': {'phone number': {'first number': '666666', 'second number': '888888'}}}}}

并没有实现预期的功能,原因与文章开头的第一段代码相同,变量只是被重新赋值,无法将变量的改变传递到字典的值。

再来:

dict1 = {'person': {'name': {'tom': {'phone number': {'first number': ['123456'],'second number': ['234567']}},'jack': {'phone number': {'first number': ['666666'],'second number': ['888888']}}}}}tom_num_1 = dict1['person']['name']['tom']['phone number']['first number']
tom_num_1[0] = '999999'
print(dict1)   # 输出:{'person': {'name': {'tom': {'phone number': {'first number': ['999999'], 'second number': ['234567']}}, 'jack': {'phone number': {'first number': ['666666'], 'second number': ['888888']}}}}}

由于变量和字典的值同时指向了同一个列表,这是因为列表是可变对象,当你通过变量修改了列表的内容时,所有指向该列表的引用都会反映出这些修改,字典的值得到了预期的修改。

 json的demo:

原始json文件的内容如下:

{
    "person": {
        "name": {
            "tom": {
                "phone number": {
                        "first number": ["123456"],
                        "second number": ["234567"]
                }
            },
            "jack": {
                "phone number": {
                        "first number": ["666666"],
                        "second number": ["888888"]
                }
            }
 
        }
    }
 
}

# encoding: utf-8
import jsonwith open('../JSON/setting.json', 'r', encoding='utf-8') as file:json_data = json.load(file)print(json.dumps(json_data, indent=4))tom = json_data["person"]["name"]["tom"]   # 定义变量
tom_1st_phone = tom["phone number"]["first number"]   # 定义变量
print(tom_1st_phone)
tom_1st_phone[0] = '000000'    # 改变变量
print(json.dumps(json_data, indent=4))with open('../JSON/setting.json', 'w') as file:   # 保存文件json.dump(json_data, file, indent=4)

执行结果:

{"person": {"name": {"tom": {"phone number": {"first number": ["123456"],"second number": ["234567"]}},"jack": {"phone number": {"first number": ["666666"],"second number": ["888888"]}}}}
}
['123456']
{"person": {"name": {"tom": {"phone number": {"first number": ["000000"],"second number": ["234567"]}},"jack": {"phone number": {"first number": ["666666"],"second number": ["888888"]}}}}
}

相关文章:

python的变量的引用与赋值的学习

看代码: a 1 # 初始化变量a,赋值为1 b a # 变量b被赋值为变量a的值,此时b的值也为1 b 2 # 变量b被重新赋值为2 print(a) # 打印变量a的值 执行过程如下: a 1:变量a被赋值为1。b a:变量b被赋值为…...

【FPGA项目】bin文件ram存取回环测试

🎉欢迎来到FPGA专栏~bin文件ram存取回环测试 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大…...

北航数据结构与程序设计第五次作业选填题复习

选填题考的很多都是基础概念,对于巩固复习一些仡佬拐角的知识点是很有用的。非北航学生也可以来看看这些题,这一节主要是树方面的习题: 一、 我们首先需要知道一个公式 这是证明: 知道了这个公式,我们把题目中的数据…...

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第40课-实时订阅后端数据

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第40课-实时订阅后端数据 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引…...

系统集成知识科普:核心原理与关键技术

目录 1.系统集成的核心原理 1.1 模块化原理 1.1.1 定义: 1.1.2 优势: 1.1.3 实现方式: 1.2 标准化原理 1.2.1 定义: 1.2.2 作用: 1.2.3 实践案例: 1.2.4 制定与遵循: 1.3 协同性原理…...

Coze+Discord:打造你的免费AI助手(教您如何免费使用GPT-4o/Gemini等最新最强的大模型/Discord如何正确连接Coze)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 准备Discord📝 准备Coze🔌 连接💡 测试效果⚓️ 相关链接 ⚓️📖 介绍 📖 你是否想免费使用GPT-4o/Gemini等最新最强的大模型,但又不想花费高昂的费用?本文将教你如何通过Coze搭建Bot,并将其转发…...

「OC」UI练习(二)——照片墙

「OC」UI练习——照片墙 文章目录 「OC」UI练习——照片墙UITapGestureRecognizer介绍照片墙实现 UITapGestureRecognizer介绍 UITapGestureRecognizer是UIKit框架中的一个手势识别器类,用于检测用户在视图上的轻击手势。它是UIGestureRecognizer的一个子类&#x…...

一手洞悉巴西slot游戏包投放本土网盟CPI广告优势

一手洞悉巴西slot游戏包投放本土网盟CPI广告优势 在巴西这片热土上,slot游戏包的投放本土网盟CPI广告是一项既充满挑战又富有机遇的任务。CPI(Cost Per Install)广告模式,即按安装付费,已经成为许多游戏开发商推广产品…...

中国环保网引领元宇宙新纪元 -探索绿色未来

在数字化浪潮的推动下,元宇宙这一概念正逐渐进入公众视野,成为科技与创新交汇的新前沿。作为环境保护的坚定倡导者,中国环保网秉承着推动绿色发展、构建生态文明的使命,正式踏入元宇宙领域,旨在通过高科技手段为环保事…...

2024最新流媒体在线音乐系统网站源码 音乐社区 多语言开心版

本文来自:2024最新流媒体在线音乐系统网站源码 音乐社区 多语言开心版 - 源码1688 应用介绍 简介: 2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版 图片:...

【Java】解决Java报错:FileNotFoundException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 文件路径错误2.2 文件名拼写错误2.3 文件权限问题2.4 文件路径未正确拼接 3. 解决方案3.1 检查文件路径3.2 使用相对路径和类路径3.3 检查文件权限3.4 使用文件选择器 4. 预防措施4.1 使用配置文件4.2 使用日志记录4.3 使用单元测…...

Seate分布式锁

XA模式 在第一阶段资源协调者(TC)会向资源管理者(RM)发出一个准备的请求,RM开始处理自身的业务,处理完成后不提交事务,而是向TC响应一个执行结果,表明自己成功还是失败,如…...

金融科技助力绿色金融:可持续发展新动力

随着全球气候变化和环境问题的日益严重,绿色金融作为推动环境保护和经济可持续发展的重要手段,已经受到越来越多的关注。而金融科技,作为科技与金融深度融合的产物,正以其独特的优势为绿色金融的发展注入新动力。本文将探讨金融科…...

灾备建设中虚拟机细粒度恢复的含义及技术使用

灾备建设中为了考虑虚拟机恢复的效率与实际的用途,在恢复上出了普通的恢复虚拟机,也有其余的恢复功能,比如瞬时恢复,细粒度恢复等。这里谈的就是细粒度恢复。 首先细粒度恢复是什么,这个恢复可以恢复单个备份下来的文…...

十种排序方法

目录 1.冒泡排序(Bubble Sort)代码实现 2.选择排序(Selection Sort)代码实现 3.插入排序(Insertion Sort) 4.希尔排序(Shell Sort)代码实现 5.快速排序(Quick Sort&…...

docker-compose启动oracle11、并使用navicat进行连接

一、docker-compose.yml version: 3.9 services:oracle:image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11grestart: alwaysprivileged: truecontainer_name: oracle11gvolumes:- ./data:/u01/app/oracleports:- 1521:1521network_mode: "host"logging:d…...

使用ffmpeg进行音频处理

音频处理是数字媒体制作中不可或缺的一部分,而ffmpeg作为一款强大的多媒体处理工具,为我们提供了丰富的音频处理功能。 一、查看音频信息 在处理音频之前,了解音频的基本信息是非常重要的。FFmpeg的ffprobe工具可以帮助我们查看音频的详细信息,如采样率、位深等。 示例命…...

重装系统,以及设置 深度 学习环境

因为联想y7000在ubantu系统上连不到wifi,所以打算弄双系统 第一步:下载win10镜像,之后在系统用gparted新建个分区,格式化成ntfs,用来装win10系统 第二步,制作win10启动盘,这个需要先把u盘用disks格式化&a…...

深入理解渲染引擎:打造逼真图像的关键

在数字世界中,图像渲染是创造逼真视觉效果的核心技术。渲染引擎,作为这一过程中的关键组件,负责将二维或三维的模型、纹理、光照等数据转化为人们肉眼可见的二维图像。本文将深入探讨渲染引擎的工作原理及其在打造逼真图像中所起的关键作用。…...

【LeetCode最详尽解答】128_最长连续序列 Longest-Consecutive-Sequence

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家! 链接: 128_最长连续序列 直觉 输入: nums [100, 4, 200, 1, 3, 2]输出: 4解释: 最长的连续元素序列是…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析,分为​​已启动​​和​​未启动​​两种场景: 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​:当其他组件(如Activity、Service)通过ContentR…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...