Python学习:引用

引用

变量保存字符串和整数值。

>>> spam = 42
>>> cheese = spam
>>> spam = 100
>>> spam
100
>>> cheese
42

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

但列表不是这样的。 当你将列表赋给一个变量时,实际上是将列表的“引用”赋给了该变量。引用是一个值,指向某些数据。列表引用是指向一个列表的值。这里有一些代码,让这个概念更容易理解。

#1
>>> spam = [0, 1, 2, 3, 4, 5]
#2
>>> cheese = spam
#3
>>> cheese[1] = 'Hello!'
>>> spam
[0, 'Hello!', 2, 3, 4, 5]
>>> cheese
[0, 'Hello!', 2, 3, 4, 5]

当创建列表时1,你将对它的引用赋给了变量。但下一行2只是将 spam 中的列表引用拷贝到 heese,而不是列表值本身。这意味着存储在 spam 和 cheese 中的值,现在指向了同一个列表。底下只有一个列表,因为列表本身实际从未复制。所以当你修改 cheese 变量的第一个元素时3,也修改了 spam 指向的同一个列表。

变量包含对列表值的引用, 而不是列表值本身。但对于字符串和整数值, 变量就包含了字符串或整数值。在变量必须保存可变数据类型的值时, 例如列表或字典,Python 就使用引用。对于不可变的数据类型的值, 例如字符串、 整型或元组, Python变量就保存值本身。
虽然 Python 变量在技术上包含了对列表或字典值的引用,但人们通常随意地说,该变量包含了列表或字典。

传递引用

要理解参数如何传递给函数,引用就特别重要。当函数被调用时, 参数的值被复制给变元。对于列表(以及字典, 我将在下一章中讨论), 这意味着变元得到的是引用的拷贝。 要看看这导致的后果, 请打开一个新的文件编辑器窗口, 输入以下代码, 并保存为 passingReference.py:

def eggs(someParameter):
    someParameter.append('Hello')
spam = [1, 2, 3]
eggs(spam)
print(spam)

注意, 当 eggs()被调用时, 没有使用返回值来为 spam 赋新值。相反,它直接当场修改了该列表。在运行时, 该程序产生输出如下:

[1, 2, 3, 'Hello']

copy 模块的 copy()和 deepcopy()函数

在处理列表和字典时,尽管传递引用常常是最方便的方法, 但如果函数修改了传入的列表或字典, 你可能不希望这些变动影响原来的列表或字典。要做到这一点,Python 提供了名为copy 的模块, 其中包含copy()和 deepcopy()函数

  • 第一个函数copy.copy(), 可以用来复制列表或字典这样的可变值, 而不只是复制引用。在交互式环境中输入以下代码:
>>> import copy
>>> spam = ['A', 'B', 'C', 'D']
>>> cheese = copy.copy(spam)
>>> cheese[1] = 42
>>> spam
['A', 'B', 'C', 'D']
>>> cheese
['A', 42, 'C', 'D']

现在 spam 和 cheese 变量指向独立的列表, 这就是为什么当你将 42 赋给下标 7时, 只有 cheese 中的列表被改变。

  • 如果要复制的列表中包含了列表, 那就使用 copy.deepcopy()函数来代替
    deepcopy()函数将同时复制它们内部的列表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 中,模块是一种组织 Python 代码的方式。它们是 Python 文件,可以包含函数、类和变量等。在编写大型 Python 应用程序时,模块可以使代码更加模块化、易于维护和重用。在本文中,我们将介绍 Python 模块的引用。 ## 模块引用Python 中,要使用模块中的函数、类或变量,需要先引用该模块。Python 中的 `import` 关键字用于引用模块。例如,要引用 Python 标准库中的 `math` 模块,可以使用以下代码: ```python import math ``` 这将引用名为 `math` 的模块,使得我们可以使用 `math` 模块中的函数和变量。要使用模块中的函数或变量,可以使用以下语法: ```python module_name.function_name() # 或者 module_name.variable_name ``` 例如,在上面的 `math` 模块中,我们可以使用 `math.sqrt()` 函数来计算一个数字的平方根: ```python import math x = 16 print(math.sqrt(x)) # 输出:4.0 ``` ## 别名引用 有时候,模块名可能很长,或者我们不想使用长模块名来引用它。在这种情况下,我们可以使用别名来引用模块。Python 中的 `as` 关键字用于指定别名。例如,我们可以使用以下代码来引用 `math` 模块并将其别名为 `m`: ```python import math as m ``` 这将使我们可以使用 `m` 来引用 `math` 模块中的函数和变量。例如: ```python import math as m x = 16 print(m.sqrt(x)) # 输出:4.0 ``` ## 只引用模块中的部分内容 有时候,我们只想引用模块中的部分内容,而不是整个模块。在这种情况下,我们可以使用 Python 的 `from` 关键字来引用模块中的特定内容。例如,如果我们只想引用 `math` 模块中的 `sqrt()` 函数,可以使用以下代码: ```python from math import sqrt ``` 这将只引用 `math` 模块中的 `sqrt()` 函数,而不是整个 `math` 模块。现在,我们可以直接使用 `sqrt()` 函数,而不需要使用 `math.sqrt()`: ```python from math import sqrt x = 16 print(sqrt(x)) # 输出:4.0 ``` 如果要同时引用多个函数或变量,可以使用逗号分隔它们。例如: ```python from math import sqrt, pi print(sqrt(16)) # 输出:4.0 print(pi) # 输出:3.141592653589793 ``` ## 引用模块中的所有内容 有时候,我们可能希望引用模块中的所有内容,而不需要使用模块名来访问它们。在这种情况下,我们可以使用 Python 的 `*` 运算符来引用所有内容。例如: ```python from math import * ``` 这将引用 `math` 模块中的所有函数和变量。现在,我们可以直接使用这些函数和变量,而不需要使用 `math.` 前缀: ```python from math import * x = 16 print(sqrt(x)) # 输出:4.0 print(pi) # 输出:3.141592653589793 ``` 值得注意的是,不建议使用 `*` 运算符引用模块中的所有内容,因为这可能会导致命名空间污染和变量冲突。最好只引用需要的部分内容,或者使用别名来引用模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值