Python中变量之间赋值的理解

1.问题描述

在Python项目中,有一个这样的需求:

一个文件a需要负责提供一个函数,返回该文件中一个全局变量value,类似与get_value()接口

在另一个文件b中,创建一个变量temp=get_value(),去取a文件中的value,而且希望后续a文件中对value的修改,会直接影响到b文件中的temp

例如:在a文件中,有个函数叫set_value(),里面执行value = Myclass(),希望temp也受到修改影响,变为指向新的MyClass

复制代码
# a.py

value = MyClass()

def get_value():
  return value

def set_value():
  value = MyClass()

# b.py
import a

temp = get_value()
print(temp)
set_value()
print(temp)

但上面这样操作,显然不会满足需求。

2.Python中变量的赋值逻辑

对于等号右方为非变量名时,如:value = "string" 或者 value = 10 或者 value = MyClass()

均可以理解成:value指向了一块空间a ,里面存放着右侧这些数据.(value为该指针名字)

当等号右方为变量名时,如 b = value,

可以理解成:一个新的指针b,指向了value所指向的那块空间

所以,理解了上述赋值的区别后,1中的情况就很好解释了:

temp = get_value()时,temp指针指向了value所指向的那块空间

此时调用set_value,value又重新指向了另一块新的MyClass空间,但temp依旧指向原来的MyClass

所以value的修改并不会影响temp,故无法满足需求。

3.解决方案

很明显,上述实现的阻碍在于,value更新时,会指向新的空间 ,导致外界的temp无法及时同步更新。

因此我们考虑让value降低一层,包裹在更高一层的容器中

有一个list数据a, a = [value, value1, value2, value3]

我们get这个list a,get_a(), temp = get_a()

按照上述的理解,所有的value实际上都是一个指针,指向了赋值给自己的空间

如果此时set_value,实际上是修改a[0]=MyClass(),由于value被a容器所管理,即使它指向了新的地方,也可以通过a直接访问 ,又temp指向的本身是容器a,故temp也可以直接访问到新的value

故我们目的达到,当value被修改时,我们可以通过temp取到更新后的value值

Ps:最主要的是和C++中的赋值区分开,不能单纯用C++的引用去理解

相关推荐
databook13 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar14 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805114 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_14 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机21 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机1 天前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i1 天前
drf初步梳理
python·django
每日AI新事件1 天前
python的异步函数
python