2015-07-11 133 views
3

我很困惑python的处理指针。例如:python指针内存重新分配

a=[3,4,5] 
b=a 
a[0]=10 
print a 

返回[10,4,5]

上述将指示b和a是指向相同的位置。问题是,如果我们说什么:

a[0]='some other type' 

B现在等于[“一些其他类型的”,4,5]

这不是我所期望的蟒蛇将不得不重新分配内存的行为指针位置由于类型的大小增加而增加。这里到底发生了什么?

+2

我不明白......你做了'b = a',所以'a'和'b'都指的是同一个内存位置?......不管你使用'a'将在'b'中相同.. –

+0

请查看此链接https://www.google.co.in/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=python%20variable%20memory –

回答

4
  1. Python中的变量只是指向被分配对象的内存位置。
  2. 到可变对象所做的更改。当你做b = a你实际上是在问b指的a位置,而不是实际object[3, 4, 5]

    为了进一步解释并没有创建新的对象

In [1]: a = [1, 2]  
In [2]: b = a # b & a point to same list object [1, 2]  
In [3]: b[0] = 9 # As list is mutable the original list is altered & since a is referring to the same list location, now a also changes  
In [4]: print a 
[9, 2]  
In [5]: print b 
[9, 2] 
0

Python没有指针。你的代码创建另一个变量b,它变成对a的引用,换句话说,它简单地变成了引用a的另一种方式。你对a做的任何事情也是这样做的,因为它们都是同一件事的名称。有关更多信息,请参阅python variables are pointers?