首页 > 编程语言 >Python常见面试题013.请说出下面的代码返回结果是什么?

Python常见面试题013.请说出下面的代码返回结果是什么?

时间:2023-03-13 11:46:23浏览次数:54  
标签:面试题 wuxianfeng name Python list4 请说出 list1 list2 2096763202240

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], [], []]
    

标签:面试题,wuxianfeng,name,Python,list4,请说出,list1,list2,2096763202240
From: https://www.cnblogs.com/wuxianfeng023/p/17210773.html

相关文章

  • python爬取免费高匿爬虫ip
    现在大部分门户网站都会做一些反爬虫的策略,对于长期做数据爬虫的程序猿来说那是深有体会。其实说白了就是用同一个地址频繁去爬虫一个网页很容易导致ip被关进小黑屋,为了安......
  • python函数
    函数:是组织好的,可重复使用的,用来实现特定功能的代码段。函数的定义:def函数名(传入参数):函数体return返回值 函数的调用:函数名(参数)注意事项:参数不......
  • python的正则表达式匹配C类地址
    简介如果你不理解Python正则表达式,可以参考以下步骤:学习正则表达式的基本语法。正则表达式是一种描述字符串模式的语言,通过一些特殊字符和语法规则来描述字符串的组成......
  • python 当前时间多加一天、一小时、一分钟
    importdatetime#获取当前时间print(datetime.datetime.now())#2017-07-1515:01:24.619000#格式化时间print(datetime.datetime.now().strftime("%Y-%m-%d%H:%M......
  • Python3爬虫教程之ADSL拨号爬虫ip池的使用
    在我之前做爬虫经常需要维护自己的爬虫ip池,他可以挑选出很多有用的爬虫地址,因为不是专业的而且这些爬虫ip通常是公共爬虫ip,所以可用率不是太高,而且这样类型的地址很大情况下......
  • Centos 7升级原python 2.7.5至Python 3.7
    1.安装编译环境包(防止出现安装错误)yuminstallgcc-c++gccmakecmakezlib-develbzip2-developenssl-develncurse-devel-y2.在线下载Python3.7源码包#进入tmp目......
  • python数据分析与挖掘实战第七章
    #代码7-1数据探索importpandasaspddatafile='data3/air_data.csv'#航空原始数据,第一行为属性标签resultfile='data3/explore.csv'#数据探索结果表data=......
  • 启动anaconda命题提示符之后输入python之后,出现报错: UnicodeDecodeError: ‘gbk‘ cod
      打开路径中的history.py文件,在它的的82行中添加:encoding='utf-8',然后保存history.py文件。最后重启anaconda命题提示符之后输入python即可正常运行......
  • 【项目实战】基于Python+PyQt5的GUI点餐系统(附完整源码)
    1、项目说明基于python+PyQt5的GUI点餐系统项目实战项目需要安装pycharm社区版或专业版都可,以及项目所需的所有模块项目需要安装PyQt5及其他一些模块(详见项目所需模块......
  • 在centos 7如何安装python3.10
    一、背景centos7安装后自带了python2.7但是版本很老需要升级到3.10具体思路:前置条件1、先升级CentOS7升级OpenSSL原因:CentOS7的yum仓库中,OpenSSL的版本为OpenSSL1.0.2k-fi......