前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python切片赋值操作

Python切片赋值操作

作者头像
用户1148830
发布2018-01-04 10:21:15
1.1K0
发布2018-01-04 10:21:15
举报

1. 问题

首先来看一小段列表推到的python代码

代码语言:javascript
复制
a = [1,2,3]
b = a
# 赋值1
b[:] = [x+1 for x in a]
print(a,b)
# 赋值2
b = [x-1 for x in a]
print(a,b)

来看看输出吧:

代码语言:javascript
复制
[2, 3, 4] [2, 3, 4]
[2, 3, 4] [1, 2, 3]

可能有人会有疑问,为什么同样是复制操作,结果却不同?

2. step by step

其实我们有结果再推原因,应该大概可以知道可能b[:]和a是共享同一块内存的,实践是检验真理的唯一标准,让我们分别在赋值1和赋值2之后分别输出a,b的内存地址如下:

代码语言:javascript
复制
140348034061384 140348034061384
140348034061384 140348034060872

果不其然,第一次a,b都指向的是同一块内存,而赋值2则是在原来的地址上做修改,或者可以分别输出a is b来判断a,b是否为同一个对象

再将代码稍加改动:

代码语言:javascript
复制
a = [1,2,3]
# 改成a的切片
b = a[:]
print(a,b)
print(id(a),id(b))
b = [x-1 for x in a]
print(a,b)
print(id(a),id(b))

此时的输出为:

代码语言:javascript
复制
[1, 2, 3] [1, 2, 3]
140489909315016 140489909314312
[1, 2, 3] [0, 1, 2]
140489909315016 140489909314632

我们发现当使用a[:]时,这时候返回的是一个新的对象,所以其id都不相同

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年09月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 问题
  • 2. step by step
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档