title: Why can't I add a tuple to a list with the '+' operator in Python?
body: <p>Python not support adding a tuple to a list:</p>
  
  <pre><code>&gt;&gt;&gt; [1,2,3] + (4,5,6)
  Traceback (most recent call last):
    File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  TypeError: can only concatenate list (not "tuple") to list
  </code></pre>
  
  <p>What are the disadvantages for providing such a support in the language? Note that I would expect this to be symmetric: <code>[1, 2] + (3, 4)</code> and <code>(1, 2) + [3, 4]</code> would both evaluate to a brand-new list <code>[1, 2, 3, 4]</code>. My rationale is that once someone applied operator + to a mix of tuples and lists, they are likely to do it again (very possibly in the same expression), so we might as well provide the list to avoid extra conversions.</p>
  
  <p>Here's my motivation for this question.</p>
  
  <p>It happens quite often that I have small collections that I prefer to store as tuples to avoid accidental modification and to help performance. I then need to combine such tuples with lists, and having to convert each of them to list makes for very ugly code.</p>
  
  <p>Note that <code>+=</code> or <code>extend</code> may work in simple cases. But in general, when I have an expression</p>
  
  <pre><code>columns = default_columns + columns_from_user + calculated_columns
  </code></pre>
  
  <p>I don't know which of these are tuples and which are lists. So I either have to convert everything to lists:</p>
  
  <pre><code>columns = list(default_columns) + list(columns_from_user) + list(calculated_columns)
  </code></pre>
  
  <p>Or use itertools:</p>
  
  <pre><code>columns = list(itertools.chain(default_columns, columns_from_user, calculated_columns))
  </code></pre>
  
  <p>Both of these solutions are uglier than a simple sum; and the <code>chain</code> may also be slower (since it must iterate through the inputs an element at a time).</p>