首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python byRef //复制

python byRef //复制
EN

Stack Overflow用户
提问于 2012-07-27 22:48:46
回答 4查看 1.3K关注 0票数 6

我刚接触Python (而且对编程了解不多),但我记得我读过一篇文章,说python通常不复制值,所以任何a =b语句都会使b指向a。

代码语言:javascript
复制
a = 1
b = a
a = 2
print(b)

给出结果1。这不应该是2吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-27 22:52:23

不,结果应该是1。

将赋值运算符( = )视为引用的赋值。

代码语言:javascript
复制
a = 1 #a references the integer object 1
b = a #b and a reference the same object
a = 2 #a now references a new object (2)
print b # prints 1 because you changed what a references, not b

在处理像lists这样的可变对象而不是像intfloattuple这样的不可变对象时,整个区别是最重要的。

现在考虑以下代码:

代码语言:javascript
复制
a=[]  #a references a mutable object
b=a   #b references the same mutable object
b.append(1)  #change b a little bit
print a # [1] -- because a and b still reference the same object 
        #        which was changed via b.
票数 11
EN

Stack Overflow用户

发布于 2012-07-27 22:54:13

当您执行b = a时,它会使b引用与a相同的值。然后,当您执行a = 2时,它会引用一个新值。B不受影响。

Python中的赋值规则:

  1. 赋值只是使名称引用某个名称的value.
  2. Assignment,而不会影响引用旧值的其他名称。永远不会隐式复制
  3. 数据。
票数 3
EN

Stack Overflow用户

发布于 2012-07-27 22:58:31

@mgilson有一个很棒的answer,但我发现它有点难以理解。我把这个答案放进去,试图用一种不同的方式来解释它。

代码语言:javascript
复制
a = 1 # This makes a point to a location in memory where the Integer(1) is located
b = a # This makes b point to the same place.
a = 2 # This makes a point to a different location in memory where Integer(2) is located
print(b) # b still points to the place where Integer(1) was stored, so it prints out 1.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11690220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档