python的“=”和copy的区别
<h3>1、python的赋值逻辑</h3>
<p>我们首先要先了解python的内存逻辑</p>
<pre><code class="language-python">a = 1
b = a
a = 3
print(a)
print(b)
>>>
3
1</code></pre>
<p>咋一看上面的输出没有问题,和php等的的代码逻辑一样</p>
<pre><code class="language-python">a = [1, 2, 3, 4] # 注意python的list代码格式 [ ] 中间两个数据间空格
b = a
del a[1]
print(a)
print(b)
>>>
[1, 3, 4]
[1, 3, 4]
</code></pre>
<p>这时候就会发现python的赋值逻辑和php是不一致的</p>
<p>解释第一个代码:
给a赋值1------> a 指向 1
给b赋值a------> b 指向 1 ----> a,b都指向1
给a赋值3------> python不能一个对象覆盖另一个对象 a 指向 3 ------> b 指向 1, a 指向 3</p>
<p>解释第二个代码
a 指向 [1, 2, 3, 4]
b 指向 [1, 2, 3, 4]
可以通过 id()获取<strong>a</strong>的内存地址 <strong>ADDR</strong>
删除 a[1] ----> 更改内存地址为<strong>ADDR</strong> 为[1, 3, 4]
a = [1, 3, 4]
b = [1, 3, 4]
那么怎么复制a 并且修改a 不会修改到其他 可以用<strong>copy</strong> 或[:] </p>
<pre><code class="language-python">name = ['姓名1', '姓名2', '姓名3', '姓名4']
name2 = name.copy() # 也可使用 slice 操作 会返回一个新的对象 b = a[:]
print(name)
print(id(name))
print(id(name2))
del name[2]
print(name)
print(name2)
print(name2 + name)
>>>输出
['姓名1', '姓名2', '姓名3', '姓名4']
31198016
31214528
['姓名1', '姓名2', '姓名4']
['姓名1', '姓名2', '姓名3', '姓名4']
['姓名1', '姓名2', '姓名3', '姓名4', '姓名1', '姓名2', '姓名4']</code></pre>