<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aditya</title>
    <description>The latest articles on DEV Community by Aditya (@techvani_ai).</description>
    <link>https://dev.to/techvani_ai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4155616%2F2bbe586c-6a3b-40db-aac4-0b25a9427c02.png</url>
      <title>DEV Community: Aditya</title>
      <link>https://dev.to/techvani_ai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techvani_ai"/>
    <language>en</language>
    <item>
      <title>Python mutable default arguments: why your list keeps growing (tested examples)</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Wed, 14 Oct 2026 05:55:54 +0000</pubDate>
      <link>https://dev.to/techvani_ai/python-mutable-default-arguments-why-your-list-keeps-growing-tested-examples-j38</link>
      <guid>https://dev.to/techvani_ai/python-mutable-default-arguments-why-your-list-keeps-growing-tested-examples-j38</guid>
      <description>&lt;p&gt;A list that keeps growing between function calls is one of the most common Python surprises in exams and interviews. Here is why it happens, with output I ran on Python 3.10.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bug
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add_bad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt;
    &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add_bad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add_bad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add_bad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[1]
[1, 2]
[1, 2, 3]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You expected &lt;code&gt;[1]&lt;/code&gt;, &lt;code&gt;[2]&lt;/code&gt;, &lt;code&gt;[3]&lt;/code&gt;. Python builds the default value once, when &lt;code&gt;def&lt;/code&gt; runs, not on each call. Every call that skips &lt;code&gt;bucket&lt;/code&gt; reuses the same list. You can see it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;add_bad&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__defaults__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# ([1, 2, 3],)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The fix
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;None&lt;/code&gt; as the default and create the list inside the function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add_ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add_ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;   &lt;span class="c1"&gt;# [1]
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add_ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;   &lt;span class="c1"&gt;# [2]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Same family: shallow copies
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;list.copy()&lt;/code&gt; copies only the outer list. The inner lists are shared.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;copy&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;             &lt;span class="c1"&gt;# [[1, 2, 99], [3, 4]]  a changed too
&lt;/span&gt;
&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deepcopy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="c1"&gt;# a is unchanged by c
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Same family: the grid trap
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="c1"&gt;# [[7, 0, 0], [7, 0, 0]]  both rows are one list
&lt;/span&gt;
&lt;span class="n"&gt;grid2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="n"&gt;grid2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;grid2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# [[7, 0, 0], [0, 0, 0]]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;[x] * n&lt;/code&gt; repeats a reference to the same object. A list comprehension builds a new row each time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick rule
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Never use a list, dict or set as a default argument. Use &lt;code&gt;None&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;copy()&lt;/code&gt; and slicing are shallow. Use &lt;code&gt;copy.deepcopy&lt;/code&gt; for nested data.&lt;/li&gt;
&lt;li&gt;Build 2D grids with a comprehension, not &lt;code&gt;*&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try to predict the output of each snippet before you run it. That habit is what exam questions test.&lt;/p&gt;

&lt;p&gt;I wrote a longer version with 7 more tested examples and exam-style questions here: &lt;a href="https://techvaniai.blogspot.com/2026/10/python-mutable-default-arguments-shallow-copy.html" rel="noopener noreferrer"&gt;Python Mutable Default Arguments and Shallow Copies&lt;/a&gt;. It is part of TechVani, a free BTech CSE notes and lab-files site.&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Average memory access time with a cache: formula and a worked example</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:08:39 +0000</pubDate>
      <link>https://dev.to/techvani_ai/average-memory-access-time-with-a-cache-formula-and-a-worked-example-3981</link>
      <guid>https://dev.to/techvani_ai/average-memory-access-time-with-a-cache-formula-and-a-worked-example-3981</guid>
      <description>&lt;p&gt;Average memory access time (AMAT) tells you how fast a memory system is on average, once you account for cache hits and misses.&lt;/p&gt;

&lt;p&gt;For one cache level plus main memory, with hit ratio h, cache access time Tc and main memory time Tm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If memory is accessed only after a miss is detected: AMAT = h x Tc + (1 - h) x (Tc + Tm)&lt;/li&gt;
&lt;li&gt;If cache and memory are accessed in parallel: AMAT = h x Tc + (1 - h) x Tm&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: h = 0.9, Tc = 10 ns, Tm = 100 ns. With the sequential formula, AMAT = 0.9 x 10 + 0.1 x 110 = 20 ns. Parallel access gives 0.9 x 10 + 0.1 x 100 = 19 ns.&lt;/p&gt;

&lt;p&gt;The exam trap is picking the wrong formula, so always check whether the question says the memory is accessed after a miss or simultaneously.&lt;/p&gt;

&lt;p&gt;I wrote up 6 more solved numericals (including multi-level cache and effective CPI) on my blog TechVani: &lt;a href="https://techvaniai.blogspot.com/2026/10/cache-memory-numericals-6-solved.html" rel="noopener noreferrer"&gt;https://techvaniai.blogspot.com/2026/10/cache-memory-numericals-6-solved.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>Round Robin vs SJF: a worked scheduling example you can redo by hand</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Thu, 01 Oct 2026 18:33:47 +0000</pubDate>
      <link>https://dev.to/techvani_ai/round-robin-vs-sjf-a-worked-scheduling-example-you-can-redo-by-hand-524i</link>
      <guid>https://dev.to/techvani_ai/round-robin-vs-sjf-a-worked-scheduling-example-you-can-redo-by-hand-524i</guid>
      <description>&lt;p&gt;Scheduling questions in OS exams look scary, but the method is the same every time: draw the Gantt chart, then read waiting time and turnaround time off it.&lt;/p&gt;

&lt;p&gt;Take 3 processes, all arriving at time 0:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Process&lt;/th&gt;
&lt;th&gt;Burst&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;P1&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;SJF (non-preemptive)&lt;/strong&gt;: run the shortest first: P2 (0-2), P3 (2-6), P1 (6-12).&lt;br&gt;
Waiting times: P2 = 0, P3 = 2, P1 = 6. Average = 8/3 = 2.67.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round Robin, quantum = 2&lt;/strong&gt;: P1 (0-2), P2 (2-4), P3 (4-6), P1 (6-8), P3 (8-10), P1 (10-12).&lt;br&gt;
Waiting time = finish - burst: P1 = 12 - 6 = 6, P2 = 4 - 2 = 2, P3 = 10 - 4 = 6. Average = 14/3 = 4.67.&lt;/p&gt;

&lt;p&gt;So SJF gives the lower average wait here, but it can starve long jobs. Round Robin is fairer and has better response time, at the cost of more context switches.&lt;/p&gt;

&lt;p&gt;Tips: always list arrival times first, mark the quantum on the chart, and check that the total of all bursts equals the last finish time.&lt;/p&gt;

&lt;p&gt;I also made a full OS revision video (processes, scheduling, deadlock, memory, file systems) in Hinglish, about 96 min: &lt;a href="https://www.youtube.com/watch?v=RSR2sqyR5pE" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=RSR2sqyR5pE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More notes and videos on Telegram: &lt;a href="https://t.me/techvaniai" rel="noopener noreferrer"&gt;https://t.me/techvaniai&lt;/a&gt;&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
