python⾥⾯的=和copy的区别
⽬的:我想要的是把对象完全复制⼀遍放在⼀个新的内存单元中,⼆者相互独⽴。
李志为什么被全网封>等边三角形的性质狼和小羊的故事赋值(=)与复制(copy)在c++⾥⾯是⼀致的的,在Python⾥⾯似乎不同。先说说赋值(=),如a=[1, 2, 3]。这句话是什么意思呢,可以理解为把 [1, 2, 3] 看成⼀个物品。a = [1, 2, 3] 就相当于给这个物品上贴上 a 这个标签。b = a 就是给这个物品⼜贴上了⼀个 b 的标签。那么其实a和b指向的都是同⼀个地址,这个地址的内容是[1, 2, 3],改变其中⼀个就会影响另⼀个。这与我的⽬的不符。
a=[1,2,3]#等号赋值相当于把a的地址赋给了b,现在a和b⼀起指向【1,2,3】这个列表
b=a
id(a)==id(b))#ture,id()函数获得内存地址,⼆者地址相同
#—————————————因为指向相同,修改其中⼀个的内容就会影响另⼀个内容,a,b都会改变—————————————————————
a[0]=7
print(a)#[7, 2, 3]
print(b)#[7, 2, 3]
#如果a⼜指向了⼀个新的列表,那么a的地址会变,但b还是指向原本的列表
a=[4,5,6]
print(a)#[4, 5, 6]
print(b)#[7, 2, 3]
id(a)==id(b))#FALSE,⼆者的地址已经不再相同了
a = [4, 5, 6] 就相当于把 a 标签从 [7 ,2, 3] 上撕下来,贴到了 [4, 5, 6] 上,a的地址改变了。在这个过程中,[7, 2, 3] 这个物品并没有消失。
棹的拼音b ⾃始⾄终都好好的贴在 [7, 2, 3] 上,所以 b 的地址⾃然不变。
复制(copy)⼀般指深复制,即将被复制对象完全再复制⼀遍作为独⽴的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产⽣影响。
a=[1,2,3]
班名
以目标为话题的作文
py(a)#copy进⾏复制后为两个独⽴的对象
id(a)==id(b))#FALSE,a b是两个独⽴的对象,有⾃⼰的内存空间。他们的地址已经不再相同了
a[0]=10#这时改变a,是不会影响b的
print(a)#[10, 2, 3]
print(b)#[1, 2, 3]
我理解的copy就是把对象完全复制⼀遍放在⼀个新的内存单元中,你可以对复制后的东西任意操作⽽不会影响原对象