聊聊Python中关于a=[[]]*3的反思

yizhihongxing

下面是详细的攻略:

1. 概述

在Python中,定义一个列表a时,如果使用a=[[]]*3,那么实际上创建的是包含3个空列表的大列表,即下面这样:

a = [[], [], []]

但是,这里会涉及到一个坑点,即这3个子列表是共享同一内存地址的,因此对一个子列表的修改,会影响到其他的子列表。这个坑点的主要原因是,*操作符实际上将列表复制了3次,但是这3个复制品指向同一内存地址,所以对任何一个复制品的操作,实际上都是同时操作了其他的复制品。

2. 示例说明

下面,我将给出两个示例,帮助大家更好地理解“共享内存地址”的问题:

示例1:修改一个元素

首先,让我们来看一个简单的示例,如下:

a = [[], [], []]
a[0].append(1)
print(a)  # 输出: [[1], [1], [1]]

上面的代码中,我们先定义了一个包含3个空列表的大列表,然后将第一个子列表的第一个元素赋值为1,最后打印这个大列表。

可以看到,这里并没有按照我们的预期打印出[[1], [], []],而是打印出了[[1], [1], [1]]。这是因为我们修改了a[0]的元素后,实际上修改了这个子列表对应的内存地址上的元素,而这个内存地址是被3个子列表共享的,所以其他两个子列表的元素也被修改了。

示例2:增加一个元素

接下来,我们再看一个稍微复杂一些的示例:

a = [[], [], []]
a[0].append(1)
a[1] = [2]
print(a)  # 输出: [[1], [2], []]

这个示例中,我们先像之前一样修改了第一个子列表的第一个元素,然后将第二个子列表赋值为[2],最后打印这个大列表。

可以看到,这里打印出了[[1], [2], []],这符合我们的预期。这是因为,虽然第一个子列表和第二个子列表实际上指向同一个内存地址,但是我们将第二个子列表直接赋值为[2],也就是创建了一个新的列表并将其指向了第二个子列表对应的内存地址,因此这个修改是没有影响到其他子列表的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:聊聊Python中关于a=[[]]*3的反思 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • python中resample函数实现重采样和降采样代码

    那么我们来详细讲解一下“Python中resample函数实现重采样和降采样代码”的完整攻略。 什么是重采样和降采样? 在数字信号处理中,重采样指的是将一个数字信号的采样率进行改变,将原来采样间隔不一致的离散信号转化为另一种采样间隔的离散信号。而降采样则是将采样率降低的过程,即将原始信号中的高频信号滤波去除。Python中的scipy库中的resample函…

    python 2023年6月3日
    00
  • Python中应该使用%还是format来格式化字符串

    Python中有两种方法用于格式化字符串,一种叫做%操作符格式化,另一种是str.format()方法格式化。但是,它们各自有不同的优点和适用场合。 使用%操作符格式化字符串 %操作符非常直观,类似于C语言中的printf()函数。在需要格式化的字符串中插入特殊字符作为占位符,然后使用%操作符指定每个占位符的值。 age = 26 name = ‘Lucy’…

    python 2023年6月5日
    00
  • 无法使用pip命令安装python第三方库的原因及解决方法

    这里是关于无法使用 pip 命令安装 Python 第三方库的原因及解决方法的完整攻略。 原因 1. 网络问题 如果你的电脑无法连接到互联网,那么使用 pip 命令安装第三方库就会失败。此时你需要确认你的电脑是否能够正常连接到互联网,或者是否在使用代理 服务器。 此外,还有一些情况可能会导致网络连接不稳定,如 DNS 解析问题等。这些问题会导致你的 pip …

    python 2023年5月14日
    00
  • python中print的不换行即时输出的快速解决方法

    讲解“Python中print的不换行即时输出的快速解决方法”的完整攻略。本方法需要使用Python的sys和time库,步骤如下: 1. 导入库 首先需要导入sys和time库,这时Python就可以识别用于控制输出和延时的指令。 import sys,time 2. 输出字符串 使用sys.stdout.write()指令输出字符串,这个指令可以不换行地…

    python 2023年6月5日
    00
  • Auto-GPT尝鲜使用

    Auto-GPT尝鲜使用 注:部署所需:OpenAI的API Key 1. Auto-GPT本地部署 1.1. 环境准备 需要Python环境,Python版本建议>=3.8(官方写的>=3.10) 建议用Conda(Minconda或Anaconda)创建单独的虚拟环境 Git:有没有无所谓了 1.2. 项目下载 Auto-GPT项目地址:Si…

    python 2023年4月19日
    00
  • python利用多线程+队列技术爬取中介网互联网网站排行榜

    Python利用多线程+队列技术爬取中介网互联网网站排行榜 本文将详细讲解如何使用Python的多线程和队列技术爬取中介网互联网网站排行榜。我们将使用requests和BeautifulSoup库来获取和解析网页内容,使用多线程和队列技术来提高爬取效率。 爬取网页内容 首先,我们需要使用requests库来获取网页内容。以下是一个获取网页内容的示例: imp…

    python 2023年5月15日
    00
  • python list是否包含另一个list所有元素的实例

    以下是详细讲解“Python List是否包含另一个List所有元素的实例”的完整攻略。 在Python中,可以使用多种方法判断一个List是否包含另一个List所有元素。本文将介绍两种常用的方法,并提供两个示例说明。 方法一:使用all()函数和in关键字 可以使用all()函数和in关键字的方法判断一个List是否包含另一个List所有元素。例如: ls…

    python 2023年5月13日
    00
  • 深入理解Python的元类

    让我来为您详细讲解深入理解 Python 的元类完整攻略。 概念解释 首先,让我们了解一下什么是元类: 在 Python 中,一切都是对象。类也是对象,而且在 Python 中类是对象的最高形式,因为它们可以创建实例这个概念。而这种能够创建对象的对象被称为元类。 为了更好地理解元类,我们可以想象一下,类是一种蓝图,而元类就是用来创建这种蓝图的工厂。通过元类,…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部