第一道面试题 - 如何经过引用传递变量 - 2020/4/25

相信大家必定在个人公众号已经看到了,这篇文章关于 引用传递变量 的简单介绍,在这里咱们将更加深刻的理解这篇文章的重点,能够关注个人公众号哦 《志学Python》python

这篇文章我已经放到个人github 上面了,能够给我star,谢谢git

how-do-i-pass-a-variable-by-referencegithub

如何经过引用传递变量?spa

其实想问的是它这个类里面,在 __init__ 方法初始化的时候,调用了 change() 方法,如何将改变 __init__里面的 self.variable 这里变量的值,可是显然这种方式是行不通的,若是要经过引用,咱们可使用下面这种改造方式 3d

可是咱们须要更加深刻的了解究竟是怎么回事code

参数经过赋值传递。其背后的理由是双重的:对象

传入的参数其实是对对象的引用(但引用是经过值传递的) 有些数据类型是可变的,但有些则不是 因此:blog

若是将可变对象传递给方法,则该方法将得到对该对象的引用,而且能够对其进行突变,可是若是您将该引用从新绑定到该方法中,则外部做用域对此一无所知完成后,外部参考仍将指向原始对象。作用域

若是将不可变对象传递给方法,则仍然没法从新绑定外部引用,甚至没法使对象发生突变rem

列表-可变类型

咱们尝试改变列表里面数据

因为传入的参数是对的引用outer_list,而不是其副本,所以咱们可使用变异列表方法对其进行更改,并使更改反映在外部做用域中。

如今让咱们看看当尝试更改做为参数传入的引用时会发生什么:

因为the_list参数是经过值传递的,所以为其分配新列表不会影响方法外部的代码。该the_list是副本outer_list的参考,咱们不得不the_list指向一个新的列表,但没有办法改变outer_list的值

字符串-不可变的类型

它是不可变的,所以咱们无能为力,没法更改字符串的内容 如今,让咱们尝试更改参考

一样,因为the_string参数是经过值传递的,所以为其分配新的字符串不会影响方法外部的代码。该the_string是副本outer_string的参考,咱们不得不the_string指向一个新的字符串,但没有办法改变,outer_string

咱们如何解决这个问题?

能够返回新值。这不会改变事物传递的方式,可是可让您得到想要的信息:

相关文章
相关标签/搜索