示例代码如下:
a=0
b=a
print(id(a))
print(id(b))
#内存地址相同
b-=1
print(id(a))
#内存地址无变化
print(id(b))
#内存地址变化
arr_1=[0,1,2]
arr_2=arr_1
print(id(arr_1))
print(id(arr_2))
arr_1.pop()
print(id(arr_1))
print(id(arr_2))
#内存地址无变化
arr_2.pop()
print(id(arr_1))
print(id(arr_2))
#内存地址无变化
arr_1=arr_1[1:]
arr_2=arr_2[1:]
print(id(arr_1))
#内存地址变化
print(id(arr_2))
#内存地址变化
class Foo:
def __init__(self,num):
self.num=num
foo=Foo(0)
print(id(foo))
foo.num+=1
print(id(foo))
#内存地址无变化
foo=Foo(1)
print(id(foo))
#内存地址变化
总结:
python中 id 函数返回对象的内存地址
由以上代码可知
int为不可变类型 相互赋值的对象之间不相互影响
list为可变类型 相互赋值的对象之间相互影响
自定义类Foo与list相同,也为可变类型
另外无论是可变还是不可变类型,
当对象实现自我更新时,会自动开辟新的内存空间
例如当我们需要某个构造函数,当我们传入长度与头节点 head时,
返回一条指定长度的链表
只需要实例化一个节点类 vert,并为这个对象赋值vert=head
然后不断使 vert自我更新 vert=vert.next直到尽头
由于相互赋值的对象之间相互影响,此时 head后继有完整的链表
最后返回头节点return head即可得到结果