当前位置: 首页 > 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"]}}}}
}

http://www.lryc.cn/news/372204.html

相关文章:

  • 【FPGA项目】bin文件ram存取回环测试
  • 北航数据结构与程序设计第五次作业选填题复习
  • 【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第40课-实时订阅后端数据
  • 系统集成知识科普:核心原理与关键技术
  • Coze+Discord:打造你的免费AI助手(教您如何免费使用GPT-4o/Gemini等最新最强的大模型/Discord如何正确连接Coze)
  • 「OC」UI练习(二)——照片墙
  • 一手洞悉巴西slot游戏包投放本土网盟CPI广告优势
  • 中国环保网引领元宇宙新纪元 -探索绿色未来
  • 2024最新流媒体在线音乐系统网站源码 音乐社区 多语言开心版
  • 【Java】解决Java报错:FileNotFoundException
  • Seate分布式锁
  • 金融科技助力绿色金融:可持续发展新动力
  • 灾备建设中虚拟机细粒度恢复的含义及技术使用
  • 十种排序方法
  • docker-compose启动oracle11、并使用navicat进行连接
  • 使用ffmpeg进行音频处理
  • 重装系统,以及设置 深度 学习环境
  • 深入理解渲染引擎:打造逼真图像的关键
  • 【LeetCode最详尽解答】128_最长连续序列 Longest-Consecutive-Sequence
  • 盒马鲜生礼品卡如何使用?
  • 有哪些常用ORM框架
  • nodejs 中 axios 设置 burp 抓取 http 与 https
  • 数据通信与网络(二)
  • DTU为何应用如此广泛?
  • 基于软件在环的飞控机建模仿真
  • github ssh key的SHA256是什么
  • HyperBDR新版本上线,自动化容灾兼容再升级!
  • python学习—合并多个Excel工作簿表格文件
  • 如何把路由器设备的LAN口地址为三大私网地址
  • Java多线程-StampedLock(原子读写锁)