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条)

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度