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

Python函数参数传递:值还是引用

按照C++语言的思维,如果Python函数参数的传递是值的话,结果应该是[0, 1],如果是引用的话,结果应该是[‘T’, ‘Z’, ‘Y’]。 可是实际结果是:[0, 1, 100]。...所以,Python函数参数的传递既不是所谓的值也不是引用。 Python函数参数传递 那么Python中函数参数到底是以什么形式传递的呢?...不可变对象作为函数参数,相当于C系语言的值传递。 2. 可变对象作为函数参数,相当于C系语言的引用传递。...但是,其实只要我们内心记得:参数传递的是变量所指向的对象的地址就行,值传递和引用传递都是C++中的概念! 例子分析 下面我们分析几个例子: 1....所以最重要的一点是明白:Python中函数参数的传递是变量指向的对象的地址;Python中变量和对象的不同。

3.1K51

Go语言参数传递是值还是引用

对于了解一门语言来说,会关心我们在函数调用的时候,参数到底是的值,还是引用? 其实对于值和引用,是一个比较古老的话题,做研发的都有这个概念,但是可能不是非常清楚。...什么是引用(引用传递) Go语言(Golang)是没有引用传递的,这里我不能使用Go举例子,但是可以通过说明描述。...这里的map可以理解为引用类型,但是记住引用类型不是引用。...是否可以修改原内容数据,和值、引用没有必然的关系。在C++中,引用肯定是可以修改原内容数据的,在Go语言里,虽然只有值,但是我们也可以修改原内容数据,因为参数引用类型。...这里也要记住,引用类型和引用是两个概念。 再记住,Go里只有值(值传递)。

2.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Python参数传递机制值和引用原理详解

首先还是应该科普下函数参数传递机制,值和引用是什么意思?    函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。...基本的参数传递机制有两种:值传递和引用传递。   ...那python函数参就是引用?然后传参的值在被调函数内被修改也不影响主调函数的实参变量的值?再来看个例子。...Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于值和引用的一种综合。...如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“引用”来传递对象。

6.5K10

go语言中函数参数值还是引用的思考

于是乎,最近开始转向go编程,和以前写JAVA一样遇到了很多细节问题,以后有机会再多总结几篇,今天主要说一下go语言中,函数调用时参数值和引用的问题。...先说结论,golang中所有函数参数传递都是值,slice、map和chan看上去像引用只是因为他们内部有指针或本身就是指针而已。...C++函数参数值和引用 熟悉C++的程序员们应该都清楚,C++里传递函数参数的时候,值还是引用是函数声明的时候决定的。...网上有很多的说法,听到的最多的是slice,map和chan作为参数传递到函数中时是引用,其实这个说法不准确,我们不能单纯因为函数内部的修改可以反馈到外面就认为是传递的引用,更何况这种看法还会带来一些语言陷阱...综上所述,对于go来说,函数参数的传递其实都是值的方式,go里面真正涉及到引用概念的,大概只有闭包里了,有兴趣的同学可以去研究一下go闭包的实现。

4.6K40

Python学习笔记之函数参数传递 值还是引用

在学完Python函数那一章节时,很自然的的就会想到Python中函数参时值呢?还是引用?或者都不是? ...原来的值为1的int型对象仍然存在,但我们不能再通过a这个标识符去访问它了(当一个对象没有任何标签或引用指向它时,它就会被自动释放)。...现在我们再来看看开始那两段代码: def foo(var): var = 2 print(var) a = 1 foo(a) print(a) 上面这段代码把a作为参数传递给函数...那么Python中参数传递是值,还是引用呢?准确的回答:都不是。之所以不是值,因为没有产生复制,而且函数拥有与调用者同样的对象。而似乎更像是C++的引用,但是有时却不能改变实参的值。...所以只能这样说:对于不可变的对象,它看起来像C++中的值方式;对于可变对象,它看起来像C++中的按引用传递。 参考

1.8K30

Python参数传递,原来既不是值也不是引用

面试的时候,有没有被问到Python参是引用还是值这种问题?有没有听到过Python参既不是值也不是引用这种说法?一个小小的参数默认值也可能让代码出现难以查找的bug?...,对不可变对象进行修改,变量引用发生了变化。...print(id(b)) # 2006430784 13 b += 1 14 print(id(b)) # 2006430816 15immutable(b) 通过上面的代码可以看出,修改进的可变参数时...概括地说,Python参数传递时,既不是传对象也不是引用,之所以会有上述的区别,跟Python的对象机制有关,参数传递只是给对象绑定了一个新的变量(实际上是传递C中的指针)。...参数传递时的坑 理解了参数传递的逻辑,我们需要注意一下这种逻辑可能引发的问题。

83440

python参是值还是引用

因此,如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“引用”来传递对象 例2 def test2(p): p = "i in test2" print(p,...str) print(str,id(str)) 输出: i in test2 2885210784112 hello word 2885210784048 id不一样,所以说不是同一个对象,也就是说我们的还是引用...因此,如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“值'来传递对象。 总结: Python参数传递采用的肯定是“传对象引用”的方式。...这种方式相当于值和引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“引用”来传递对象。...如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“值'来传递对象。

3.5K150

迟来的函数参补充——引用引用调用】【c++】

1、引用 函数参,几乎一直在用简单的值传递,或者指针,前者生成一个源结构的副本,后者链表或者树的时候用的比较多,本文补充到一个类似值传递的函数调用方式,函数定义的参位置却是地址接收方式,这就是引用...相比值传递,几乎无参时间开销(大型结构体、长字符串尤为明显) 1.2、使用 1.2.1、一般引用 void f(int &a,int &b){ //... } f(a,b); 函数声明: void...f(int &,int &); 1.2.2、常量引用 稍微讲究一点的用法,往往是定义一个输出函数的传入参数设为常引用,意味着无更改要求。...&res){ cout<<res<<endl; } showResult(res); 函数声明: void showResult(const int &); 1.3、案例 1.3.1、常见变量引用做函数参数...除非参数结构很小,否则一般会通过引用将结构体传递给函数。

13530

如何理解java方法的值和引用参数传递方式(基本数据类型和引用类型)

结论: 1)当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值 2)当使用引用数据类型作为方法的形参时,若在方法体中 修改形参指向的数据内容,则会对实参变量的数值产生影响,...因为形参变量和实参变量共享同一块堆区; 3)当使用引用数据类型作为方法的形参时,若在方法体中 修改形参变量的指向,此时不会对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区 例一:基本数据类型作为形参...return this.age; } public void setAge(int age) { this.age = age; } } 例二:引用类型...this.name[1]; } public void setName(String[] name) { this.name = name; } } 例三:引用类型

1.8K30

关于值与引用的讨论

效率问题 对于用户自定义的类型来说,引用一般要比值高效。...而引用则不用进过如此多的构造与析构,甚至一次都不用。 对内置类型来说,值的效率往往要高于引用。内置类型包括了int,float ,double,指针类型等等。...-523832796.jpg] 可以看到,引用值多了一次寻址操作,这是因为引用的实现往往基于指针,因此引用通常意味着真正传递的是指针。...若希望在func中使用到实参的特性,引用能够保证这一点。 STL中的使用情况 如果你打开STL中的源码,你会发现容器的iterator都是通过值形式参。...如上所示,值是可以比引用快的没有,因为它少了一次解引用的操作。 (完)

78450

参、指针参、引用参区别

在C中,我们只了解到有两种参方式,一种是值传递,另外一种是传递指针,一般情况下我们选择使用指针传递参数。在C++中,又新增了一种参方式,那就是引用(type &),引用参给我们带来了更好的体验。...1、值传递 值传递是一种值拷贝的操作,一般只用于传入参数使用,而且如果传入的值体积过大(比如一个结构体),在函数压栈的过程中会拷贝一份压入栈中,会影响效率。...3、引用传递 引用作为一个变量的别名,相当于一段内存的引用。在传递给函数时相当于包装了原变量指针的地址传递给函数,可以理解为在函数中直接使用原变量进行操作,而且这个期间不会出现拷贝的行为。...引用的本质是指针,C++对裸露的内存地址(指针)作了一次包装。又取得的指针的优良特性。所以再对引用取地址,建立引用的指针没有意义。...// swap(&x, &y); // 引用 swap(x, y); cout << x << “–” << y << endl; getchar(); return 0; }

15540

关于值与引用的讨论

效率问题 对于用户自定义的类型来说,引用一般要比值高效。...而引用则不用进过如此多的构造与析构,甚至一次都不用。 对内置类型来说,值的效率往往要高于引用。内置类型包括了int,float ,double,指针类型等等。...f()时,其汇编代码为: 当通过引用调用函数g()时,其汇编代码为: 可以看到,引用值多了一次寻址操作,这是因为引用的实现往往基于指针,因此引用通常意味着真正传递的是指针。...若希望在func中使用到实参的特性,引用能够保证这一点。 STL中的使用情况 如果你打开STL中的源码,你会发现容器的iterator都是通过值形式参。...如上所示,值是可以比引用快的没有,因为它少了一次解引用的操作。 (完)

72720
领券