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++的引用去理解

Python中变量之间赋值的理解的更多相关文章

  1. Python中变量、赋值、浅拷贝、深拷贝

    https://www.cnblogs.com/LetMe/p/6724555.html 在理解浅拷贝和深拷贝之前,首先要理解学习一下变量在Python中是怎样存储的: 变量的类型是分值引用与地址引用 ...

  2. Python中变量和常量的理解

    一.变量的定义:把程序运算的中间结果临时存到内存里,以备后面的代码继续调用,这几个名字的学名就叫做"变量". 二.变量的作用:变量用于存储要在计算机程序中引用和操作的信息.它提供了 ...

  3. 关于python中的增量赋值的理解

    增量赋值运算符 += 和 *= 的表现取决于它们的第一个操作对象 += 操作首先会尝试调用对象的 __ iadd__方法,如果没有该方法,那么尝试调用__add__方法,所以+= 与 + 的区别实质是 ...

  4. python中变量的命令规制及变量的赋值方式

    文章结构:              一.python中变量的命名规则             二.变量赋值的三种方式             三.python的垃圾回收机制 一.Python中变量的 ...

  5. python中的深拷贝和浅拷贝理解

    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用.以下分两个思路来分别理解浅拷贝和深拷贝: 利用切 ...

  6. Python中变量的本质探索

    Python中变量的本质探索 参考:Vamei博客Python进阶09 动态类型 ''' a = [1,2,3] ''' (1)这条"赋值语句"实际上是将a指向对象"[1 ...

  7. python中变量在内存中的存储与地址关系解析、浅度/深度copy、值传递、引用传递

    ---恢复内容开始--- 1.变量.地址 变量的实现方式有:引用语义.值语义 python语言中变量的实现方式就是引用语义,在变量里面保存的是值(对象)的引用(值所在处内存空间的地址).采用这种方式, ...

  8. Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  9. python中self cls init的理解

    原创文章,未经允许禁止转载! python中self cls init的理解 python中self cls init的理解

  10. 在shell中变量的赋值有五种方法!

    转至:https://blog.csdn.net/weibo1230123/article/details/82085226 在shell中变量的赋值有五种 :使用 read 命令,直接赋值,使用命令 ...

随机推荐

  1. 【2020.11.30提高组模拟】剪辣椒(chilli) 题解

    [2020.11.30提高组模拟]剪辣椒(chilli) 题解 题意简述 给你一棵树,删去两条边,使得形成的三棵新树的大小极差最小化.求最小极差. \(3\le n\le 200,000\). Sol ...

  2. 「Note」树论方向

    1. 重链剖分 1.1. 简介 重链剖分将树分割成若干链维护信息,将树的结构转换为线性结构,然后可用其他数据结构维护. 定义以下概念: 重子节点 轻子节点 重边 轻边 重链 某节点的子节点中子树大小最 ...

  3. GoWeb服务器搭建

    GoWeb服务器的创建 1.Web工作原理 2.GoWeb服务器的创建 Go提供了一系列用于创建Web服务器的标准库,而且通过Go创建一个服务器的步骤非常简单,只要通过net/http包调用Liste ...

  4. android input

    通常,从EditText中获取字符串很简单:    EditText text = findViewById(R.id.textName);    String name = text.getText ...

  5. ChunJun FTP Connector 功能扩展解读

    本文将从 FTP Connector的功能详解,自定义文件切割及自定义 FileFormat 三个方面为大家带来 ChunJun FTP Connector 的功能扩展分享. FTP Connecto ...

  6. 基于Modbus TCP的MCGS上位机软件教程

    1.概述 ZLAN5143D 是一款专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体.如图 1所示 图 1 ...

  7. 页面上多个audio只播放一个

    // ts版-vue private justPalyOne() { const audios = document.querySelectorAll("audio"); // 暂 ...

  8. node js 版本更新

    简介 RT 命令 sudo npm cache clean -f sudo npm install -g n sudo n stable 参考链接 https://askubuntu.com/ques ...

  9. BMesh 逆收缩代码对应解释

    构建标量场函数为了演化(逆收缩) \[f_{i}(r)=\left\{\begin{array}{c} \left(1-\left(\frac{r}{R_{i}}\right)^{2}\right)^ ...

  10. docker 开启远程访问功能

    简介 部署了一个http服务在docker上,由于docker有自己的端口似乎无法访问 参考链接 https://blog.csdn.net/longzhanpeng/article/details/ ...