title: Changing class attributes by reference
body: <p>I'm relatively new to Python and have problems with immutable variables. </p>
  
  <p>I'm trying to change the value of a class attribute (e.g. car.color). The difficulty is, that I can not use the namespace of car for doing this.</p>
  
  <p>Up to now I did not find a satisvying answer to my questions. In the code below I tried to summarize the possible solutions (workarrounds) I found and their disadvantages:</p>
  
  <pre><code>class Car:
  
      def __init__(self):
          self.color = "green"
          self.color_list = ["green"]
          self.color_attrib = "green"
          self.name = "VW Golf"
          """
          and many more attributes...
          """
  
      def makesetter(self, attribute):
          def set_value(value):
              attribute=value
          return set_value
  
      def set_color(self, value):
          "in this function I directly have access to car.color and can change its value: "
          self.color = value
  
      def set_attrib(self, attribute_string, value):
          setattr(self,attribute_string,value)
  
  def change_attribute(attribute, value):
      "In this function I can not access car.color directly"
      attribute=value
  
  def change_attribute_list(attribute, value):
      "In this function I can not access car.color directly"
      attribute[0] = value
  
  
  
  if __name__ == "__main__":
  
      car1 = Car()
  
      change_attribute(car1.color, "red")
      print(car1.color)  # Color does not change because car1.color is immutable
  
      g = car1.makesetter(car1.color)
      g("red")
      print(car1.color)   # Color does not change because car1.color is immutable
  
      change_attribute_list(car1.color_list, "red")
      print(car1.color_list)  # Color changes but seems like a workarround
      # Disadvantage: in the namespace of car1, the user has to use a list to access a string value "car1.color_list[0]"
  
      car1.set_color("red")
      print(car1.color)  # Color changes but seems like a workarround
      # Disadvantage: Car needs a setter function for each attribute
  
      car1.set_attrib("color_attrib","red")
      print(car1.color_attrib)  # Color changes but seems like a workarround
      # Disadvantage: Attribute has to be passed as string &amp; no auto completion while coding
  </code></pre>
  
  <p>Actually the function setattr() is internally exactly doing what I want. But it works with a string argument.
  I tried to look into this function but it seems to be written in C++.</p>
  
  <p>So do I have to use C++ to solve this problem without a workarround?
  Or is there a Pythionic way of doing this?</p>