一、赋值 str例子 >>> a = 'hello' >>> b = 'hello' >>> c = a >>> [id(x) for x in (a,b,c)] [42654216, 42654216, 42654216] a,b,c三者地址一样,相当于a=b=c。赋值系统先给变量或对象(这里的hello)分配了内存,然后将地址赋给a,b,c。所以他们的地址是相同的。 >>> a = 'world' >>> [id(x) for x in (a,b,c)] [42654384, 42654216, 42654216] >>> print(a,b,c) world hello hello 这时只有a的地址和值变了,但是b,c地址和值都没有变。因为str的不可变性,a要重新赋值则需重新开辟内存空间,所以a的值改变,a指向的地址改变。b, c由于'hello'的不变性,不会发生改变。 list例 >>> a = ['hello'] >>> b = ['hello'] >>> c = a >>> [id(x) for x in (a,b,c)] [42670920, 42671816, 42670920] 但是这种情况却不一样了,a和b的地址不同。为何? 因为str是不可变的,所以同样是'hello'只有一个地址,但是list是可变的,所以必须分配两个地址。 >>> a[0] =