013.请说出下面的代码返回结果是什么?

*的坑;简单题

参考:https://docs.python.org/zh-cn/3.9/library/stdtypes.html#typesseq

示例代码

lists = [[]] * 3
lists[0].append(1)
  • 请问lists此时是什么?

  • 如果刚学python你应该会脱口而出[[1],[],[]]

  • 但如果学过一段时间了,老师这么问,应该有猫腻,难道是?

  • 所以答案是

[[1],[1],[1]]
  • 那么为什么呢?
  • 如果我想要结果是下面这样,该如何做?
[[1],[],[]]

原因说明

  • 看下面的演示代码你就知道为何是上面的结果了

    >>> list1 = [[]]
    >>> id(list1[0])
    2096763202240
    >>> list1*3
    [[], [], []]
    >>> list1
    [[]]
    >>> list2 = list1*3
    >>> list2
    [[], [], []]
    >>> id(list2[0])
    2096763202240
    >>> id(list2[1])
    2096763202240
    >>> id(list2[2])
    2096763202240
  • 从上面的演示代码可以看出

  • list1是一个含有一个空列表的列表,list1*3这样的行为中的三个元素都是对那个空列表的引用,都是同一个对象!

  • 修改 lists1 中的任何一个元素实际上都是对这一个空列表的修改

  • 事实只要是可变对象都是如此的效果

    >>> list4 =[{}] * 4
    >>> list4
    [{}, {}, {}, {}]
    >>> list4[0]['name']='wuxianfeng'
    >>> list4
    [{'name': 'wuxianfeng'}, {'name': 'wuxianfeng'}, {'name': 'wuxianfeng'}, {'name': 'wuxianfeng'}]

拓展

  • 如果你要创建一个包含多个同款可变对象的列表

  • 正确的姿势可以是这样的

    >>> list2 = [[] for _ in range(3)]
    >>> list2[0].append(1)
    >>> list2
    [[1], [], []]

Python常见面试题013.请说出下面的代码返回结果是什么?的更多相关文章

  1. 整理的最全 python常见面试题(基本必考)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  2. 整理的最全 python常见面试题

      整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩ 1.大数据的文件读取: ① 利用生成器generator: ②迭代器进行迭代遍历:for line in file; 2.迭代 ...

  3. Python常见面试题

    Q 1:Python 有哪些特点和优点? 作为一门编程入门语言,Python 主要有以下特点和优点: ● 可解释● 具有动态特性● 面向对象● 简明简单● 开源● 具有强大的社区支持当然,实际上 Py ...

  4. python常见面试题(三)

    问题1 到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做). 答案 下面是一些关键点: Python是一种解释型语言.这就是说,与C语言和C的衍生语言不同,Python代码在运行 ...

  5. python常见面试题(一)

    1.Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一.对象的引用计数机制 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都 ...

  6. python常见面试题(mark)

    1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in file 2.迭代器和生成器的区别 1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方 ...

  7. python常见面试题(二)

    1. 到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做). 下面是一些关键点: Python是一种解释型语言.这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需 ...

  8. 315道Python常见面试题

    第一部分,Python基础篇 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? Python ...

  9. 【python常见面试题】之python 中对list去重的多种方法

    在python相关职位的面试过程中,会对列表list的去重进行考察.(注意有时会要求保证去重的顺序性) 1.直观方法 li=[1,2,3,4,5,1,2,3] new_li=[] for i in l ...

  10. 10道Python常见面试题

    1.MySQL索引种类 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 2.索引在什么情况下遵循最左前缀的规则? 最左前缀原理的一部分,索引index1:(a,b,c),只会走a ...

随机推荐

  1. C/C++:printf 函数格式化输出,用法详细记录

    printf ( print format )函数是接触C/C++之后接触的第一个函数,它的功能除了输出hello world外,更重要的是进行格式化输出,比如输出整数的%d,输出小数的%f,%lf ...

  2. pythonn全栈学习笔记--logging模块学习(四)

    一.logging相关配置 1 import logging 2 """ 3 asctime:运行时间 4 name:主模块名称 5 levelname:日志级别 INF ...

  3. Simple Algebra

    题意 给定方程\(f(x)=ax^2+bxy+cy^2\)和参数\(a\),\(b\),\(c\),试确定该方程的取值是否恒非负. 题解 参照文章http://math.mit.edu/~mckern ...

  4. Python 用exec来获取字符串所对应的字典

    Python 用exec来获取字符串所对应的字典 Python exec 问题的提出 想要遍历两个结构相似的字典,但是不想采用字典内嵌套字典的方式,所以想要通过一个列表,该列表包含字典名称.也就是通过 ...

  5. 高级纹理以及复杂而真实的应用——ShaderCp10

    --20.9.7 这章主要分成三个部分 立方体纹理(cubemap) 渲染纹理(RenderTexture,rt) 和程序纹理 一.立方体纹理 立方体纹理顾名思义是一种三维的纹理形状类似于立方体,由六 ...

  6. SQL-建表注释

    ddl 是对表结构的操作 create(创建)命令.alter(修改)命令.drop(删除)dml 是对表数据的操作 insert(插入)命令.update(更新)命令.delete(删除) alte ...

  7. Jetlinks物联网基础平台 前端运行项目遇到的问题

    电脑中的环境要必备 node.js和yarn(需要将他们都添加到环境变量中,否则会报错) 1.在github上面拉取代码 $ git clone https://github.com/jetlinks ...

  8. 「AutoCAD2022」

    「AutoCAD2022」https://www.aliyundrive.com/s/rxktpNqtHC5点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速 ...

  9. UE5农场项目小功能(1)-砍树

    砍树功能效果的实现 ​ 在UE中想做一个砍树的功能,B站上没找到什么教程,最后在油管上找到个视频并跟着实现了,一共设计到三个蓝图和一个什么也没写的蓝图接口,下面介绍下步骤. 1.角色蓝图的部分 人物这 ...

  10. react修改静态文件根目录

    .env(项目根目录环境变量文件) PUBLIC_URL:http://cdn.com/