lianglu14 2021-06-20 18:25 采纳率: 100%
浏览 34
已采纳

python列表输出为什么结果不一样呢?

a = [1,2,3,4,5]
acopy1=a
acopy2 = a.copy()
print(a)
print(acopy2)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

In [15]:

 

a [3]= "hello"
print(a)
print(acopy2)
[1, 2, 3, 'hello', 5]
[1, 2, 3, 4, 5]

In [16]:

 

m = ['a', 'b', 'c']
n = [1, 2, 3]
x = [m, n]
y = x.copy()
print('x=',x)
print('y=',y)
x= [['a', 'b', 'c'], [1, 2, 3]]
y= [['a', 'b', 'c'], [1, 2, 3]]

In [17]:

 

x[0][0] = 1
print('x=',x)
print('y=',y)
x= [[1, 'b', 'c'], [1, 2, 3]]
y= [[1, 'b', 'c'], [1, 2, 3]]
  • 写回答

2条回答 默认 最新

  • 关注

    列表是按地址传递的。

    当把一个列表从一个变量传递到另一个变量中时,两个变量都指向这同一个列表的地址。

     

    a=[1,2];

    b=a #a和b变量都指向同一个列表的地址。

    print(id(a),id(b)) #两个变量指向同一个地址

     

    当对列表的属性赋值时,实际上是先读取变量中的地址找到列表,再改变这个列表的属性。

    这样之后再用另一个变量中的地址所找到的也是这同一个列表,会获取到一样的列表内容。

     

    b[1]=3;

    print(b[1]) #输出 3

    print(a[1]) #输出 3

     

    而用b=a.copy()是产生一个新列表,a和b变量指向的是不同的列表地址


     

    但是.copy() 只是浅拷贝,只能拷贝一层,详细的看下这个:

    https://www.cnblogs.com/OoycyoO/p/9573051.html

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥150 求 《小魔指》街机游戏机整合模拟软件
  • ¥20 你好,我想问下easyExcel下拉多选,或者复选框可以实现吗