列表的可变性

2024-06-02 13:52
文章标签 列表 可变性

本文主要是介绍列表的可变性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

列表的可变性

Python里的内置数据类型, 大致上可分为可变与不可变两种。

  • 可变(mutable):列表、字典、集合
  • 不可变(immutable):整数、浮点数、字符串、字节串、元组

列表是可变的,当我们初始化一个列表后,仍然可以调用.append()、.extend()等方法来修改它的内容。而字符串和整数等都是不可变的—我们没法修改一个已经存在的字符串对象。

学习Python时,理解类型的可变性是非常重要的一课。如果不掌握它,你在写代码时就会遇到很多与之相关的“Surprise“。

示例说明。

示例一:为字符串追加内容

在这个示例里, 我们定义一个往字符串追加内容的函数add_str(), 并在外层用一个字符串参数调用该函数:

def add_str(in_func_obj):print(f'In add [before]: in_func_obj = "{in_func_obj}"')in_func_obj += ' suffix'print(f'In add [after]: in_func_obj = "{in_func_obj}"')orig_obj = 'foo'
print(f'Outside [before]: orig_obj="{orig_obj}"')
add_str(orig_obj)
print(f'Outside [after]: orig_obj="{orig_obj}"')

运行上面的代码会输出这样的结果:


Outside [before]: orig_obj="foo"
In add [before]: in_func_obj = "foo"
In add [after]: in_func_obj = "foo suffix"# 重要:这里的orig_obj变量还是原来的值
Outside [after]: orig_obj="foo"

这段代码里,原始字符串对象orig_obj被作为参数传给了add_str()函数的in_func_obj变量。随后函数内部通过+=操作修改了in_func_obj的值,为其增加了后缀字符串。但重点是:函数外的orig_obj变量所指向的值没有受到任何影响。

示例二:为列表追加内容

在这个例子中,我们保留一模一样的代码逻辑,但是把orig_obj换成了列表对象:

def add_list(in_func_obj):print(f'In add [before]: in_func_obj = "{in_func_obj}"')in_func_obj += ['baz']print(f'In add [after]: in_func_obj = "{in_func_obj}"')orig_obj = ['foo', 'bar']
print(f'Outside [before]: orig_obj="{orig_obj}"')
add_list(orig_obj)
print(f'Outside [after]: orig_obj="{orig_obj}"')

执行后会发现结果大不一样:

Outside [before]: orig_obj="['foo', 'bar']"
In add [before]: in_func_obj = "['foo', 'bar']"
In add [after]: in_func_obj = "['foo', 'bar', 'baz']"# 注意:函数外的orig_obj变量的值已经被修改了
Outside [after]: orig_obj="['foo', 'bar', 'baz']"

当操作对象变成列表后,函数内的+=操作居然可以修改原始变量的值!

这篇关于列表的可变性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024154

相关文章

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

Spring+MyBatis+jeasyui 功能树列表

java代码@EnablePaging@RequestMapping(value = "/queryFunctionList.html")@ResponseBodypublic Map<String, Object> queryFunctionList() {String parentId = "";List<FunctionDisplay> tables = query(parent

Exchange 服务器地址列表的配置方法与注意事项

Exchange Server 是微软推出的一款企业级邮件服务器软件,广泛应用于企业内部邮件系统的搭建与管理。配置 Exchange 服务器地址列表是其中一个关键环节。本文将详细介绍 Exchange 服务器地址列表的配置方法与注意事项,帮助系统管理员顺利完成这一任务。 内容目录 1. 引言 2. 准备工作 3. 配置地址列表 3.1 创建地址列表 3.2 使用 Exchange

Python--列表简介

列表是什么 列表让你能够在⼀个地方存储成组的信息,其中既可以只包含几个元素,也可以包含数百万个元素。列表是新手可直接使用的最强大的Python 功能之⼀。 列表(list)是一种可变的序列类型,用于存储一系列有序的元素。这些元素可以是任何类型,包括整数、浮点数、字符串、其他列表(即嵌套列表)等。列表是动态的,可以在运行时增加或删除元素。 用方括号([ ])表示列表,用逗号分隔其中的元素。

移动UI:分类列表页、筛选页的设计揭秘。

移动UI的列表页设计需要考虑用户体验和界面美观性,以下是一些建议的设计要点: 1. 列表项的展示: 列表页应该清晰地展示各个列表项,包括标题、副标题、缩略图等内容,以便用户快速浏览和识别。可以使用卡片式布局或者简洁的列表布局。 2. 搜索和筛选: 如果列表项较多,应该提供搜索和筛选功能,方便用户查找感兴趣的内容。搜索框和筛选条件可以放置在页面顶部或者底部,以便用户方便操作。

【语句】如何将列表拼接成字符串并截取20个字符后面的

base_info = "".join(tree.xpath('/html/head/script[4]/text()'))[20:] 以下是对这个语句的详细讲解: tree.xpath('/html/head/script[4]/text()')部分: tree:通常是一个已经构建好的 HTML 文档树对象,它是通过相关的 HTML 解析库(比如 lxml)对 HTML 文档进行解

Python中如何实现列表推导式(List Comprehension)

Python中的列表推导式(List Comprehension)是一种简洁且高效的方式来创建列表。它不仅让代码更加简洁,而且通常比使用循环和条件语句生成列表更快。列表推导式的基本形式允许你从现有的列表或其他可迭代对象中创建新的列表,同时应用过滤和转换操作。下面我将详细解释列表推导式的概念、基本语法、高级用法以及其在实际应用中的优势。 一、列表推导式的基本概念 列表推导式是Python中的一种

【R语言数据类型】深入了解 向量、矩阵、数据框、列表

R语言数据类型有向量、矩阵、数据框、列表。下面我们来深入了解下: vector 的划分 R中的vector分为两类,atomic和list,二者的区别在于,前者元素类型必须相同,后者可以不同。前者的代表是向量和矩阵,后者的代表是list和数据框。 创建向量、矩阵、数据框、列表 # atomica <- 1:5b <- letters[1:5]c <- 1:10mat <- matr

【oracle sql错误】ORA-01795: 列表中的最大表达式数为 1000

select SOURCE_ID,FILTER_TEXT from TEXT_CENTER where SOURCE_ID in() in后面的括号里的数目超过1000条。 问题描述: SQL进行IN查询时,IN中的数据量不能超过1000条。 解决办法: 拆分:id in (1,2,3,4,5,,,,999) or id in(1000,1001,1002,1003,1004,,,,,,

macos系统内置php文件列表 系统自带php卸载方法

在macos系统中, 自带已经安装了php, 根据不同的macos版本php的版本号可能不同, 我们可以通过 which php 命令来查看mac自带的默认php安装路径, 不过注意这个只是php的执行文件路径. 系统自带php文件列表 一下就是macos默认安装的php文件列表. macos 10.15内置PHP文件列表配置文件 /private/etc/php-fpm.conf.def