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  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示