琐碎知识点


python的“=”和copy的区别

<h3>1、python的赋值逻辑</h3> <p>我们首先要先了解python的内存逻辑</p> <pre><code class="language-python">a = 1 b = a a = 3 print(a) print(b) &gt;&gt;&gt; 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) &gt;&gt;&gt; [1, 3, 4] [1, 3, 4] </code></pre> <p>这时候就会发现python的赋值逻辑和php是不一致的</p> <p>解释第一个代码: 给a赋值1------&gt; a 指向 1 给b赋值a------&gt; b 指向 1 ----&gt; a,b都指向1 给a赋值3------&gt; python不能一个对象覆盖另一个对象 a 指向 3 ------&gt; 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] ----&gt; 更改内存地址为<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) &gt;&gt;&gt;输出 ['姓名1', '姓名2', '姓名3', '姓名4'] 31198016 31214528 ['姓名1', '姓名2', '姓名4'] ['姓名1', '姓名2', '姓名3', '姓名4'] ['姓名1', '姓名2', '姓名3', '姓名4', '姓名1', '姓名2', '姓名4']</code></pre>

页面列表

ITEM_HTML