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

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

*的坑;简单题
参考:https://docs.python.org/zh-cn/3.9/library/stdtypes.html#typesseq

1|1示例代码

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

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

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

  • 所以答案是

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

1|2原因说明

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

    >>> 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'}]

1|3拓展

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

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

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

__EOF__

本文作者博客已废弃
本文链接https://www.cnblogs.com/wuxianfeng023/p/17210773.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   博客已废弃  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示