Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python指针内存重新分配_Python - Fatal编程技术网

python指针内存重新分配

python指针内存重新分配,python,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必须在指针位置重新分配内存。这里到底发生了什么?Python没有指针。您的代码创建了另一个变量b,它成为对a的引用,换句话说,它只是成为引用a的另一种方式。你对a做的任何事

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必须在指针位置重新分配内存。这里到底发生了什么?

Python没有指针。您的代码创建了另一个变量b,它成为对a的引用,换句话说,它只是成为引用a的另一种方式。你对a做的任何事都是为了成为,因为它们都是同一件事的名字。有关详细信息,请参阅

  • Python中的变量只是对所分配对象的内存位置的引用
  • 对可变对象所做的更改不会创建新对象
  • 当您执行
    b=a
    时,实际上是要求
    b
    引用
    a
    的位置,而不是实际的
    对象
    [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]
    

    我不明白…你做了
    b=a
    ,所以
    a
    b
    都指向同一个内存位置?…你使用
    a
    所做的任何更改都将与
    b
    中的相同。请查看此链接