where it was not intended this type of logical error can be difficult to track down by using adts and requiring access via the interfacewe have fewer access points to debug the implementation of the abstract data type can be changed without having to modify the program code that uses the adt there are many times when we discover the initial implementation of an adt is not the most efficient or we need the data organized in different way suppose our initial approach to the previous problem of storing collection of values is to simply append new values to the end of the list what happens if we later decide the items should be arranged in different order than simply appending them to the endif we are accessing the list directlythen we will have to modify our code at every point where values are added and make sure they are not rearranged in other places by requiring access via the interfacewe can easily "swap outthe black box with new implementation with no impact on code segments that use the adt it' easier to manage and divide larger programs into smaller modulesallowing different members of team to work on the separate modules large programming projects are commonly developed by teams of programmers in which the workload is divided among the members by working with adts and agreeing on their definitionthe team can better ensure the individual modules will work together when all the pieces are combined using our previous exampleif each member of the team directly accessed the list storing the collection of valuesthey may inadvertently organize the data in different ways or modify the list in some unexpected way when the various modules are combinedthe results may be unpredictable data structures working with abstract data typeswhich separate the definition from the implementationis advantageous in solving problems and writing programs at some pointhoweverwe must provide concrete implementation in order for the program to execute adts provided in language librarieslike pythonare implemented by the maintainers of the library when you define and create your own abstract data typesyou must eventually provide an implementation the choices you make in implementing your adt can affect its functionality and efficiency abstract data types can be simple or complex simple adt is composed of single or several individually named data fields such as those used to represent date or rational number the complex adts are composed of collection of data values such as the python list or dictionary complex abstract data types are implemented using particular data structurewhich is the physical representation of how data is organized and manipulated data structures can be characterized by how they store and organize the individual data elements and what operations are available for accessing and manipulating the data