首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

巨蟒。为什么我传递的变量没有被更新?它们不是通过引用传递的吗?

巨蟒(Python)是一种高级编程语言,具有简洁、易读、易学的特点,被广泛应用于前端开发、后端开发、数据科学、人工智能等领域。下面是关于为什么传递的变量没有被更新的解释:

在巨蟒中,变量的传递方式可以分为值传递和引用传递两种。对于不可变类型的变量(如数字、字符串、元组),采用的是值传递方式,即传递的是变量的值副本,而不是变量本身。因此,当你在函数内部修改这些不可变类型的变量时,实际上是创建了一个新的变量,而原始变量并没有被修改。

而对于可变类型的变量(如列表、字典、集合),采用的是引用传递方式,即传递的是变量的引用,函数内部对变量的修改会影响到原始变量。但需要注意的是,如果在函数内部对可变类型的变量进行重新赋值操作(如使用赋值运算符=),那么会改变变量的引用,使其指向一个新的对象,而不会影响到原始变量。

所以,当你传递一个可变类型的变量到函数中,并在函数内部对其进行修改时,变量会被更新。但如果你传递的是不可变类型的变量,或者在函数内部对可变类型的变量进行重新赋值操作,那么变量不会被更新。

为了解决这个问题,你可以考虑以下几种方法:

  1. 返回修改后的变量值,并在函数外部进行赋值操作。
  2. 将可变类型的变量作为函数的参数,并在函数内部直接修改它。
  3. 使用全局变量,在函数内部声明变量为全局变量,并在函数内部修改它。

总结起来,巨蟒中的变量传递方式取决于变量的类型,对于不可变类型的变量采用值传递,对于可变类型的变量采用引用传递。因此,当传递的变量没有被更新时,可能是因为传递的是不可变类型的变量,或者在函数内部对可变类型的变量进行了重新赋值操作。

相关搜索:为什么我的值没有被正确更新和传递?在GDScript中有没有通过引用传递内置变量的方法?为什么我的操作在传递给eventhandlers时没有被调度?为什么我通过绑定传递的数据还没有定义?我可以在Javascript中通过引用传递列表(或矩阵)的列表吗?如何通过值而不是引用将变量作为参数传递给dart中的函数?在body - PhpStorm中传递引用没有被有效地使用,为什么它是“坏的”?如何更改指针变量的值并将更改保存在函数外部,而不是通过引用传递?通过引用Winform传递哈希表;在取消BGW时,此变量在BGW中的用法不会更新最初传递的哈希表我试图通过py文件传递一个全局变量。这是正确的吗?如何通过引用将数据传递给有状态的小部件?我想要更改有状态小部件中的变量并更新原始变量将临时变量传递给构造函数中的引用arg.但不是一般的功能.为什么?我可以将一个变量通过$1传递给PostgreSQL中的"NOTIFY“命令吗?当我从有状态小部件向无状态小部件传递回调时,为什么我的复选框没有更新?为什么当包含指针成员的类对象通过引用传递时,析构函数会被多次调用?我该如何纠正这个问题呢?为什么我的app.post请求表单不能通过Express app.post?如何将数字变量传递给另一个POST请求?木偶人,nodejs。我不确定为什么尝试通过变量传递值时会出现错误"is undefined",但当我使用普通的int时,它可以工作
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一文理清 Go 引用的常见疑惑

Go 中有引用类型吗?什么是值传递?址传递?引用传递? 在开始谈论之前,我已经感觉到这必定是一个非常头疼的话题。这或许就是学了那么多语言,但没有深入总结,从而导致的思维混乱。...相当绕人是不是? 我已经感觉到自己头发在掉了。其实,要想彻底搞清楚这些概念,还是得从本质出发。 值和指针 先来搞明白值与指针区别。 上一节在介绍指针的时候,提到了要注意变量的地址和内容的不同。...参考值传递的定义,实参地址在函数调用被传递给形参,针对形参的操作,影响到了实参,则可以认为是引用传递。 在我用过的语言中,支持引用传递的语言有 PHP 和 C++。...最初我也迷糊,Go 不是有指针和引用类型吗。但读了一些文章,思考了许久,才彻底想明白。下面,我将尝试为官方的说法找个合理的解释。...但于 Go 而言,指针已经弱化了很多,Go 团队可能也觉得没有必要再单独强调指针的地位。 为什么说 Go 中没有引用传递?

51630

2019年Java面试题基础系列228道(1),快看看哪些你还不会?

18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?...102、在没有使用临时变量的情况如何交换两个整数变量的值? 103、接口是什么?为什么要使用接口而不是直接使用具体类? 104、Java 中,抽象类与接口之间有什么不同?...首先需要注意的是 f1、f2、f3、f4 四个变量都是 Integer 对象引用,所以下面的==运算比较的不是值而是引用。装箱的本质是什么呢?...18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递。Java 语言的方法调用只支持参数的值传递。...当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。

1.1K00
  • 50道JavaScript详解面试题,你需要了解一下

    答案是输出为10,因为将对象传递给函数时的对象相似,仅传递其值,而不传递对内存位置的实际引用。这就是为什么更改仅影响函数范围内的参数的原因。 3、控制台输出是什么?...typeof在右侧使用变量名称, instanceof在左侧和右侧使用值,而不是。 答案是B,因为它们都不要求TypeScript,并且两者都不是JavaScript固有的。...控制台输出将为'Mohit',因为内部函数有权访问在外部作用域中声明的变量。 27、函数引用自身进行递归的三种方式是什么?...但是,可以在JavaScript中通过在未将所有可能的参数都传递给函数时返回不同的输出来执行重载。 29、return语句在数组的forEach循环中做什么?...阴影DOM API提供了一种隐藏的单独的DOM,附加到不是通过正常的访问元件JS DOM操作API。它提供Web组件的封装。

    3.5K40

    Java大型互联网公司经典面试题,论JDK源码的重要性的无限思考

    题目的意思是:定义了两个Integer类型变量,通过swap方法交换这两个变量的值。 看似简单的题目,是不是不知道从何下手,我猜想有些大家第一想到的是这样的解法:来看代码: ? 运行结果如下: ?...引用传递:传递的是指向值的地址的指针 那么,请问大家,这里是按值传递还是引用传递?好,老司机告诉你们,这里是按值传递,为什么?Integer不是对象吗? 对象传递不是传递的指针吗?...结果是,a的值确实变了,但是b的值却没有变,首先说明通过这种方式确实可以改变值,但是为什么b的值没有变化呢?。请问为什么?我们再回过头来看看外面的方法,检查一下,我们定义了: ?...那么我们按照正常来写是不是这样子的: int a = 1; 但是为什么使用Integer也不会报错了,好,这就讲到了我们又一个知识点:(笔记) Java中的装箱和拆箱 装箱:把基本类型用它们相应的引用类型包装起来...结果为:false 那么,这个当时我其实又遇到这个坑,被坑惨了是吧。哈哈哈。 那么我们怎么解决最后的问题:(最初的面试问题) 1. ? 2. ? 3.取巧的方式: ? 好啦。到此结束啦!

    1.1K10

    C语言中常见指针问题集解答

    要自增 p 指向的值, 使用(*p)++, 如果副作用的顺序无关紧要也可以使用 ++*p。 3. 我有一个char*型指针正巧指向一些int型变量,我想跳过它们。为什么如下的代码不行?...int *ip; f(ip); 答:你确定函数初始化的是你希望它初始化的东西吗?请记住在 C 中, 参数是通过值传递的。被调函数仅仅修改了传入的指针副本。...你需要传入指针的地址 (函数变成接受指针的指针), 或者让函数返回指针。 5. 我能否用void**指针作为参数, 使函数按引用接收一般指针? 答:不可以。C中没有一般的指针的指针类型。...C有“按引用传递”吗? 答:真的没有。严格地讲,C总是按值传递。你可以自己模拟按引用传递, 定义接受指针的函数,然后在调用时使用 & 操作符。...事实上,当你向函数传入数组时,编译器本质上就是在模拟按引用传递。但是 C 没有任何真正等同于正式的按引用传递或 C++ 的引用参数的东西。

    55940

    教你如何在 React 中逃离闭包陷阱 ...

    什么是过期的闭包,它们为什么会出现。 React 中导致过期闭包的常见场景是什么,以及如何应对它们。...如果我尝试对 onClick 回调使用 Ref 而不是 useCallback 钩子,会发生什么情况呢?有些文章会建议通过这样做来 memoize 组件上的 props。...我们的 ref 在创建时只会初始化一次,并且不会自行更新。这基本上就是我们一开始创建的逻辑,只是我们传递的不是值,而是我们想要保留的函数。...我们在 onClick 中的值从未更新过,你能告诉我为什么吗? 当然,这又是一个过期闭包。当我们创建 onClick 时,首先使用默认状态值(undefined)形成闭包。...但是,当闭包冻结周围的一切时,并不会使对象不可变或被冻结。对象存储在内存的不同部分,多个变量可以包含对完全相同对象的引用。

    69040

    2025新鲜出炉--前端面试题(三)

    参数传递:基本数据类型作为函数参数传递时,传递的是值的副本;引用数据类型传递的是引用地址,因此函数内部对参数的修改可能会影响到原始对象。...函数可以存储在对象的属性中,作为对象的方法被调用。 函数可以创建对象,例如通过构造函数或者工厂函数。 问题:能说一下 js 里面关于原型和原型链的概念吗?...变量可以在运行时做更新呢, css 变量他会带来什么问题吗?...CSS 变量可以在运行时更新,是因为它们是浏览器原生支持的,并且是动态的。当通过 JavaScript 修改了 CSS 变量的值时,所有使用该变量的 CSS 属性都会自动更新。...CSS 变量可能带来的问题包括: 兼容性: 不是所有浏览器都支持 CSS 变量,尽管现代浏览器大多已支持。 性能: 过度使用 CSS 变量可能会影响页面的性能,尤其是在大量动态更新变量时。

    11410

    Java中真的只有值传递么?

    在谈这个问题之前我们先了解值传递和引用传递的概念及现象。我还记得,值传递和引用传递这些概念是大学里学Java的时候老师教给我的,它们的概念是什么呢?老师是通过例子来讲解的,大概是这样的。...通过看控制台输出,main()方法中的num变量的值没有改变。 结论:基本类型是值传递。...所以,其实String类型传的是引用,只不过被重新赋值指向了别的对象了,没有修改原对象。即,String本质上还是引用传递,表像上是值传递。...解析 我觉得论证者分析基本类型和引用类型的实参形参的变化的原理是没有问题的,但是得出的结论是不是有点不恰当。怎么说呢?请继续看。 论证者的意思是,java只有值传递。...传递的是引用的值,计算机中不全是值吗,不是值还能是什么,说是引用传递是侧重点不同传,传过去的就是地址就是引用,引用不用值表示用啥 这里说的值不是一个概念,说基本类型传的是值,这个是值变量本身的值,说对象传的也是值

    1.1K20

    Java有值类型吗?

    Java,Scheme 等语言的原始类型,比如 char,int,boolean,double 等,在“实现”上确实是通过值(而不是引用,或者叫指针)直接传递的,然而这完全是一种为了效率的优化(叫做 inlining...这种优化对于程序员应该是不可见的。Java 继承了 Scheme/Lisp 的衣钵,它们在“语义”上其实是没有值类型的。 这不是天方夜谭,为了理解这一点,你可以做一个很有意思的思维实验。...然后你会发现这样“改造后”的 Java,仍然符合现有 Java 代码里能看到的一切现象。也就是说,原始类型被作为值类型还是引用类型,对于程序员完全没有区别。...这两种事情,就跟你能对值类型能做的两件事情没有区别。这就是为什么你没法通过对 x 的操作而改变 y 表示的值。所以不管 int 在实现上是传递值还是传递引用,它们在语义上都是等价的。...思考题 有人指出,Java 的引用类型可以是 null,而原始类型不行,所以引用类型和值类型还是有区别的。但是其实这并不能否认本文指出的观点,你可以想想这是为什么吗?

    5.7K20

    C++初阶 类和对象(下)

    前言:C++初阶系列,每一期博主都会使用简单朴素的语言将对应的知识分享给大家,争取让所有人都可以听懂,C++初阶系列会持续更新,上学期间将不定时更新,但总会更的 一、拷贝构造函数 1.1 什么是拷贝构造函数...拷贝构造函数只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。 1.2 为什么得是引用?...为什么这个形参得是被类对象的引用呢,我直接传递我这个要拷贝的目标不可以吗,不是一样的操作吗。...,至于为什么要加const是因为我们传递过去的变量是被拷贝的,是不会被修改的 加个const是为了避免一些低级错误的发生,比方说修改到了被拷贝的对象,同时增加了代码的可读性。...return tmp; } 2.3.3前置++和后置++运算符重载 在C++中前置++和后置++如果我们要对它进行重载,你就会惊讶的发现,它们两的运算符名字其实是一模一样的,这怎么进行区分呢,祖师爷其实也没有太好的办法

    16310

    C++初阶 入门(2)

    1.3使用缺省函数 大致了解了一下缺省函数,接下来让我们实践一下,比方说我要计算一批长方体的体积,但它们大部分长宽均为5,高度全都不同。...2.2为什么要有函数重载 看完概念的小伙伴一定会有一个疑惑,那就是这个函数重载它有用吗,在学习c的时候老师严肃强调的一件事就是绝对不要创建相同名字的函数或者是相同名字的变量,否则会导致编译器识别紊乱。...3.1什么是引用 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。...通过图片可以看出,a是b,b也是a,b和a的本质是一样的 打印地址更是强有力的证明了我们的观点 必须重视的几点 1.引用在定义时必须要初始化 2.一个变量可以有多个引用,就像一个人可以有多个外号一样...引用概念上定义一个变量的别名,指针存储一个变量地址。 2. 引用在定义时必须初始化,指针没有要求 3.

    16110

    初级程序员面试不靠谱指南(三)

    的地址不一样,说明了编译器给pointer分配了一个内存单元,而ref_i没有,这里就是它们的第一个不同点,编译器会给指针分配一个内存单元,而对于引用不会,所以说ref_i所表示都不能称之为一个变量或什么的...有一点需要强调的是,在C语言中,不能使用类似swap1(int &i,int &j)这样的形式,因为C语言中没有按址传递的概念,它通过传递指针实现按址传递,但是其本质还是传递的值,只不过传递的是一个地址的值...int &b=7;     你可以先试试,答案可能是不能通过编译,因为7是一个常量,自然需要一个常量的引用,所以正确的写法应该是const int& b=7,那么这个引用有没有被分配内存呢?...如果你试着输出会发现其被分配了一个内存,你可能要说不是引用不会被分配内存吗?但是这里被分配内存的是这个常量'7',而不是引用b,所以这一点和前面所论述的并不矛盾。    ...,所以,a变量的值被覆盖了,至于为什么不是0,这个问题在这里展开就太多了,你可以试试在你注释掉所有的cout和test语句中,就能得到正确的结果。

    73290

    26 TIPS IN PYTHON

    bashplotlib 你想在控制台中绘制图表吗? ? 你就可以在控制台中画出图表了。 collections python有一些很好的默认数据类型,但有时它们表现的不如你期望的哪样。...这些表达式使得容易编写非常干净的代码,读起来几乎像自然语言。 你可以在这里阅读更多关于如何使用它们的信息。 ? map python通过许多内置特性支持功能编程。...有没有想过python为什么允许你使用"+"运算符来相加数字以及连接字符串?这就是运算符重载。 你可以用特殊的方法定义使用Python标准运算符符号的对象。...定义变量、函数、类等时,不需要指定数据类型。 这有助于缩短开发时间。然而,没有什么比简单的类型问题导致的运行错误更令人讨厌的了。 自Python 3.5以来,你可以选择在定义函数时提供类型提示。 ?...虽然这不是强制性的,但是类型注释可以让你的代码更容易被理解。 它们还允许你在运行之前使用类型检查工具来捕获这些杂散的类型错误。如果你正在进行大型复杂的项目,这很值得的使用!

    1.5K30

    女朋友问我:小松子,你知道Go语言参数传递是传值还是传引用吗?

    前言 哈喽,大家好,我是asong。今天女朋友问我,小松子,你知道Go语言参数传递是传值还是传引用吗?...哎呀哈,我竟然被瞧不起了,我立马一顿操作,给他讲的明明白白的,小丫头片子,还是太嫩,大家且听我细细道来~~~。 文末留了一道思考题,请留下你的答案!!!...通过上面的分析,我们就可以确定go就是值传递,因为我们在modifieNumber方法中打印出来的内存地址发生了改变,所以不是引用传递,实锤了奥兄弟们,证据确凿~~~。...map我们可以通过方法修改它的内容,并且它没有明显的指针。...在这里,Go语言通过make函数,字面量的包装,为我们省去了指针的操作,让我们可以更容易的使用map。这里的map可以理解为引用类型,但是记住引用类型不是传引用。 chan是值传递吗?

    35210

    我用 React 和 Vue 构建了同款应用,来看看哪里不一样(2020 版)

    我想尽量保持中立,通过这样的例子来告诉大家这两种技术执行特定任务时是怎样做的。 当 React Hooks 发布时,我为这篇文章更新了 “2019 版”,用函数式 Hooks 取代了类组件。...在应用中,我们将调用 name.value 来引用它。如果要使用在 ref() 函数内部创建的值,我们将在变量上寻找.value 而不是简单地调用该变量。...换句话说,如果我们想要一个持有状态的变量值,我们将寻找 name.value 而不是 name。如果要更新 name 的值,可以通过更新 name.value 来完成。...你可能觉得…list 看起来很奇怪:开头的三个点称为 spread 运算符,负责将 list 中的所有值作为单独的项目传递,而不是简单地把所有项目打包在一起作为数组传递。感觉有些糊涂吗?...从这里开始,我们就可以通过 this.props 在子组件中引用它们。因此要访问 item.todo prop 时,我们只需调用 props.item。

    4.8K30

    前端阿瓜每周速记(2020 第 34 周)

    值传递、引用传递、解释型、编译型 我知道你知道,JS 值有两大类型:基本类型和引用类型。基本类型按值传递,引用类型按引用传递。非常优秀,背的简直不要太熟,但你有想过为什么要这么划分吗?...这些变量保存在哪里?内存中? 内存的分配策略是如何的呢? 为什么是内存,不是 CPU?不是外存?本瓜在面试中被问过,面试官多半是后端或架构师 不要方,抱紧我。芜湖起飞!...这种传递值的方式叫做共享传递 Stack Overflow 的解释:对于传递到函数参数的对象类型,如果直接改变了拷贝的引用的指向地址,那是不会影响到原来的那个对象;如果是通过拷贝的引用,去进行内部的值的操作...为了不让程序员费心分配内存,JavaScript 在定义变量时就完成了内存分配。———— MDN (os:还用我说什么吗?“JS是最好的语言”打在评论中。)...类型 回顾三种 XSS 类型: DOM 型(DOM XSS),即用户输入没有提交到服务器,只是被前端js接收并显示所引起的XSS。

    66130

    Java的传值调用

    探讨了网上关于Java只有值传递的说法,当时写这篇文章的缘由是因为之前看的文章讲解的Java只有值传递,讲的不是让我很明白,没有拿出比较专业的解释或定义,没有说服我。...通过看控制台输出,main()方法中的num变量的值没有改变。 结论:实参没有被形参影响,基本类型是值传递。...通过看控制台输出,main()方法中的user变量的name属性值发生改变。 结论:形参变了实参也变了,引用类型是引用传递。...所以,其实String类型传的是引用,只不过被重新赋值指向了别的对象了,没有修改原对象。即,String本质上还是引用传递,表像上是值传递。...因为列表是可变的,append方法改变了m。而赋值局部变量l的行为对外面作用域没有影响(在这类语言中赋值是给变量绑定一个新对象,而不是改变对象)。

    3.5K20

    新手入门C语言编程:使用函数必须知道的三点注意事项!

    所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。...那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。 C 语言中函数使用的注意事项,你们知道吗?...这个函数是错误的,因为函数在进行参数传递的时候,会将传入参数 m,n 的值拷贝给函数的形式参数 a,b。 因此在函数内部交换的是形式参数 a,b 的值,而不是交换传递时 m,n 变量的值。...因为我们这里传递的是 m,n 的内存地址,即传递的是指针,所以在函数内部对指针解除引用就可以直接访问这个地址的内容了,这是指针提供的特性。 那么是否就意为着传递指针就没有副本机制了呢?...只不过这里拷贝的是地址而不是值,在内部通过指针的解引用操作可以直接访问 m,n 的内存地址,进而进行交换。

    1.2K20

    还记得指针与引用吗?说下呗!

    引用:没有const引用。 ⑥关于sizeof "sizeof指针":得到的是指针本身的大小。 "sizeof引用":得到的是所指向的变量(对象)的大小。...当把指针作为参数进行传递时,也是将实参的一个拷贝传递给形参,即上面程序main函数中的p和test函数中使用的p不是同一个变量,存储2个变量p的单元也不相同(只是2个p指向同一个存储单元)。...在讲引用作为函数参数进行传递时,实质上传递的是实参本身,而不是实参的拷贝,对形参的修改就是对实参的修改。因此在用引用进行参数传递时,不仅节约时间,而且可以节约空间。...,事实上传递的是实参本身,而不是拷贝。...fr=aladdin 有趣的经验分享 互联网的你们,还想要读博吗? 挖年薪60w的腾讯同学来做技术VP 算法岗,不会写简历?我把它拆开,手把手教你写! (算法从业人员必备!)

    53230

    临时变量作为非const的引用进行参数传递引发的编译错误

    其中文意思为临时变量无法为非const的引用初始化。也就是在参数传递的过程中,出现错误。...---- 2.所有的临时对象都是const对象吗 为什么临时对象作为引用参数传递时,必须是常量引用呢?很多人对此的解释是临时对象是常量,不允许赋值改动,所以作为非常量引用传递时,编译器就会报错。...事实上,临时变量是可以被作为左值(LValue) 并被赋值的,请看下面的代码: class IntClass{ private: int x; public: IntClass(int...IntClass(6)表示生成一个无名的临时对象,传递给非const引用,在print函数中通过引用修改了这个临时对象。这说明了并非所有的临时对象都是const对象。...这里贴上摘自网上的一句话:“内置类型产生的临时变量具有常性,而自定义类型产生的临时变量不具有常性”,我想这句话能解释你所谓的临时变量为什么能作为左值的原因。”

    2.6K31
    领券