Loading

引用&传递引用

一、引用

>>> spam = 42
>>> cheese = spam
>>> spam = 108
>>> spam
108
>>> cheese
42

将42赋值给spam变量,然后拷贝spam中的值,将它赋值给变量cheese,稍后将spam值改为108时,这不会影响cheese中的值。这是因为spam和cheese是不同的变量,保存了不同的值。

列表就不是这样的,当将列表赋值给一个变量是,实际上是将列表的“引用”赋值给了该变量。引用是一个值,指向某些数据。列表引用是指向一个列表的值。

①>>> spam = [0,1,2,3,4,5]
②>>> cheese = spam
③>>> cheese[1] = "hello"
>>> spam
[0, 'hello', 2, 3, 4, 5]
>>> cheese
[0, 'hello', 2, 3, 4, 5]

此时代码只改变了cheese列表,但是cheese和spam列表同时发生了改变。

当创建列表①时,将对它的引用赋给了变量。代码②中将spam中的列表引用拷贝到cheese,而不是列表值本身。这意味着存储在spam和cheese中的值,现在指向了同一个列表。

Tips:

对于字符串和整数值,变量就包含了字符串或整数值;在变量保存可变数据类型的值,例如列表或字典,python就使用引用。对于不可变的数据类型的值,例如字符串,整型或元组,python变量就保存值本身。

二、传递引用

>>> spam = [0,1,2,3,4,5]
>>> def eggs(someParameter):
...     someParameter.append("hello")
...
>>> eggs(spam)
>>> print(spam)
[0, 1, 2, 3, 4, 5, 'hello']

尽管spam和someparameter包含了不同的引用,但它们都指向相同的列表。这就是为什么函数内的append("hello")方法调用在函数函数调用返回后,依然会对该列表产生影响。

作者:solomon-zj

出处:https://www.cnblogs.com/solomon-zj/p/17322428.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   solomon-zj  阅读(14)  评论(0编辑  收藏  举报
努力加载评论中...
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示