python指针内存重新分配

时间:2015-07-11 05:54:46

标签: 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]

这不是我期望的行为,因为python必须在指针位置重新分配内存,因为类型的大小增加。到底发生了什么?

2 个答案:

答案 0 :(得分:4)

  1. Python中的变量只是对所分配对象的内存位置的引用。
  2. 对可变对象所做的更改不会创建新对象
  3. 执行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]
    

答案 1 :(得分:0)

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